SqlUpdateImpl.java

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

import org.springframework.jdbc.core.JdbcTemplate;

import com.github.mygreen.splate.ProcessResult;
import com.github.mygreen.splate.SqlTemplate;
import com.github.mygreen.splate.SqlTemplateContext;
import com.github.mygreen.sqlmapper.core.SqlMapperContext;
import com.github.mygreen.sqlmapper.core.query.JdbcTemplateBuilder;

import lombok.Getter;


/**
 * SQLテンプレートによる更新(INSERT / UPDATE/ DELETE)を行うクエリの実装です。
 *
 *
 * @author T.TSUCHIE
 *
 */
public class SqlUpdateImpl implements SqlUpdate {

    /**
     * SqlMapperの設定情報。
     */
    @Getter
    private final SqlMapperContext context;

    /**
     * SQLテンプレートです。
     */
    @Getter
    private final SqlTemplate template;

    /**
     * SQLテンプレートのパラメータです。
     */
    @Getter
    private final SqlTemplateContext parameter;

    @Getter
    private Integer queryTimeout;

    public SqlUpdateImpl(SqlMapperContext context, SqlTemplate template, SqlTemplateContext parameter) {
        this.context = context;
        this.template = template;
        this.parameter = parameter;
    }

    @Override
    public SqlUpdateImpl queryTimeout(int seconds) {
        this.queryTimeout = seconds;
        return this;
    }

    @Override
    public int execute() {
        ProcessResult result = template.process(parameter);
        return getJdbcTemplate().update(result.getSql(), result.getParameters().toArray());

    }

    /**
     * {@link JdbcTemplate}を取得します。
     * @return {@link JdbcTemplate}のインスタンス。
     */
    private JdbcTemplate getJdbcTemplate() {
        return JdbcTemplateBuilder.create(context.getDataSource(), context.getJdbcTemplateProperties())
                .queryTimeout(queryTimeout)
                .build();
    }

}