SqlCountImpl.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テンプレートによる件数のカウントを行うクエリの実装です。
*
*
* @author T.TSUCHIE
*
*/
public class SqlCountImpl implements SqlCount {
/**
* SqlMapperの設定情報。
*/
@Getter
private final SqlMapperContext context;
/**
* SQLテンプレートです。
*/
@Getter
private final SqlTemplate template;
/**
* SQLテンプレートのパラメータです。
*/
@Getter
private final SqlTemplateContext parameter;
@Getter
private Integer queryTimeout;
public SqlCountImpl(SqlMapperContext context, SqlTemplate template, SqlTemplateContext parameter) {
this.context = context;
this.template = template;
this.parameter = parameter;
}
@Override
public SqlCountImpl queryTimeout(int seconds) {
this.queryTimeout = seconds;
return this;
}
@Override
public long getCount() {
ProcessResult result = template.process(parameter);
String sql = context.getDialect().convertGetCountSql(result.getSql());
return getJdbcTemplate().queryForObject(sql, Long.class, result.getParameters().toArray());
}
/**
* {@link JdbcTemplate}を取得します。
* @return {@link JdbcTemplate}のインスタンス。
*/
private JdbcTemplate getJdbcTemplate() {
return JdbcTemplateBuilder.create(context.getDataSource(), context.getJdbcTemplateProperties())
.queryTimeout(queryTimeout)
.build();
}
}