package com.ycsoft.daos.core.impl;
import static com.ycsoft.commons.helper.LoggerHelper.debug;
import static com.ycsoft.commons.helper.LoggerHelper.isDebugEnabled;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import com.ycsoft.daos.core.AbstractQuery;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.daos.core.generator.SQLGenerator;
/**
* 根据命名参数名称,与实体类的属性,设置参数值
*
* @author hh
* @date Jan 13, 2010 9:31:39 PM
*/
@SuppressWarnings("unchecked")
public class NameQueryImpl<T> extends AbstractQuery<T> {
private Map params ;
private NamedParameterJdbcTemplate jdbcTemplate ;
private Class entityCls ;
public NameQueryImpl(String sql ,
NamedParameterJdbcTemplate nameJT ,
SQLGenerator sqlGenerator ,
Map params ,
Class entityCls ){
this.sql = sql ;
this.jdbcTemplate = nameJT ;
this.sqlGenerator = sqlGenerator;
this.params = params ;
this.entityCls = entityCls ;
}
/**
* <p>
* 获得当前结果集的条数。如果是分页那么现实的就是总函数
* </p>
*
* @throws JDBCException
*/
public int count()throws JDBCException{
return jdbcTemplate.queryForInt(sqlGenerator.getPageCount(sql),params);
}
public void outPrintSql(int resultSize){
if (isDebugEnabled(getClass())) {
StringBuffer p = new StringBuffer();
p.append("query result ").append(resultSize).append(" ");
p.append(sql).append("{");
Iterator it = params.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
p.append("(").append(key).append(":").append(params.get(key))
.append(")");
}
p.append("}");
debug(getClass(), p.toString());
}
}
public List<T> list() throws JDBCException {
List result = jdbcTemplate.query(sql, params,
new BeanPropertyRowMapper(entityCls));
outPrintSql(result.size());
return result;
}
public T first() throws JDBCException {
List<T> result = jdbcTemplate.query(sql, params,
new BeanPropertyRowMapper(entityCls));
outPrintSql(result.size());
return result.size() == 0 ? null : result.get(0);
}
}