JdbcTemplateBuilder.java

package com.github.mygreen.sqlmapper.core.query;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

import com.github.mygreen.sqlmapper.core.config.JdbcTemplateProperties;

import lombok.AccessLevel;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * {@link JdbcTemplate}を組み立てます。
 *
 *
 * @author T.TSUCHIE
 *
 */
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class JdbcTemplateBuilder {

    /**
     * データソース
     */
    private final DataSource dataSource;

    /**
     * 初期値のプロパティ
     */
    private final JdbcTemplateProperties init;

    /**
     * フェッチサイズ
     */
    @Accessors(chain = true, fluent = true)
    @Setter
    private Integer fetchSize;

    /**
     * 最大取得行数
     */
    @Accessors(chain = true, fluent = true)
    @Setter
    private Integer maxRows;

    /**
     * クエリのタイムアウト
     */
    @Accessors(chain = true, fluent = true)
    @Setter
    private Integer queryTimeout;

    /**
     * {@link JdbcTemplate}を組み立てるためのビルダのインスタンスを作成します。
     * @param dataSource データソース
     * @param init 初期値設定値。
     * @return ビルダクラス。
     */
    public static JdbcTemplateBuilder create(DataSource dataSource, @NonNull JdbcTemplateProperties init) {
        JdbcTemplateBuilder builder = new JdbcTemplateBuilder(dataSource, init);
        return builder;
    }

    /**
     * 設定値をもとに{@link JdbcTemplate}のインスタンスを組み立てます。
     * @return {@link JdbcTemplate}のインスタンス。
     */
    public JdbcTemplate build() {

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        jdbcTemplate.setResultsMapCaseInsensitive(true);
        jdbcTemplate.setIgnoreWarnings(init.isIgnoreWarning());

        if(fetchSize != null) {
            jdbcTemplate.setFetchSize(fetchSize);
        } else {
            jdbcTemplate.setFetchSize(init.getFetchSize());
        }

        if(maxRows != null) {
            jdbcTemplate.setMaxRows(maxRows);
        } else {
            jdbcTemplate.setMaxRows(init.getMaxRows());
        }

        if(queryTimeout != null) {
            jdbcTemplate.setQueryTimeout(queryTimeout);
        } else {
            jdbcTemplate.setQueryTimeout(init.getQueryTimeout());
        }

        return jdbcTemplate;

    }


}