package oa.common.dao;
import java.util.List;
import oa.common.model.PageModel;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
public abstract class BaseDAO extends NamedParameterJdbcDaoSupport {
protected final static String PAGE_SQL_PREFIX = "select * from(select m.*,rownum num from (";
protected final static String PAGE_SQL_END = ") m where rownum<=?) where num>?";
/**
* 适用于更新数据库,insert,update, delete
*
* @param namedSql
* :命名参数的SQL语句,而且参数的命名必须和JavaBean中的属性名对应
* @param javaBean
* :javabean对象
* @return
*/
protected int update(String namedSql, Object javaBean) {
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(
javaBean);
return this.getNamedParameterJdbcTemplate().update(namedSql,paramSource);
}
protected int commonUpdate(String sql, Object... paramValue) {
return this.getJdbcTemplate().update(sql, paramValue);
}
protected T getJavaBean(String sql, Class returnType,
Object... paramValue) {
RowMapper rowMapper = new BeanPropertyRowMapper(returnType);
try{
return this.getJdbcTemplate()
.queryForObject(sql, rowMapper, paramValue);
}catch(Exception ex){
return null;
}
}
protected List getList(String sql, Class returnType,
Object... paramValue) {
RowMapper rowMapper = new BeanPropertyRowMapper(returnType);
return this.getJdbcTemplate().query(sql, rowMapper, paramValue);
}
protected List getList(String sql, Class returnType) {
RowMapper rowMapper = new BeanPropertyRowMapper(returnType);
return this.getJdbcTemplate().query(sql, rowMapper);
}
/**
* 计算总记录数
*
* @param countSQL
* 计算总记录数的count语句
* @param paramValue
* 语句中对应的参数值
* @return 总记录数
*/
protected int getCount(String countSQL, List paramValue) {
return this.getJdbcTemplate().queryForInt(countSQL,
paramValue.toArray());
}
protected int getCount(String countSQL, Object... paramValue) {
return this.getJdbcTemplate().queryForInt(countSQL, paramValue);
}
protected PageModel getPageModel(PageModel model,
StringBuilder querySQL, StringBuilder countSQL,
StringBuilder whereSQL, List paramList, Class returnType) {
querySQL.append(whereSQL);
countSQL.append(whereSQL);
// 计算总记录数
int allCount = this.getCount(countSQL.toString(), paramList);
// 获取分页记录集
// 1。构造完整的分页语句
querySQL.insert(0, PAGE_SQL_PREFIX);
querySQL.append(PAGE_SQL_END);
// 2.把分页语句中的参数值加入到paramList中
paramList.add(model.getNumPerPage()* model.getPageNum());
paramList.add(( model.getPageNum() - 1) *model.getNumPerPage());
List result = this.getList(querySQL.toString(), returnType,
paramList.toArray());
PageModel models = new PageModel();
models.setTotalCount(allCount);
models.setNumPerPage(model.getNumPerPage());
models.setPageNum(model.getPageNum());
models.setResult(result);
models.setOrderDirection(model.getOrderDirection());
models.setOrderField(model.getOrderField());
return models;
}
}