java 封装的基类Springjdbc可以通用

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
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<T> 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<T> returnType,
            Object... paramValue) {
        RowMapper<T> rowMapper = new BeanPropertyRowMapper<T>(returnType);
        try{
        return this.getJdbcTemplate()
                .queryForObject(sql, rowMapper, paramValue);
        }catch(Exception ex){
            return null;
        }
    }

    protected List<T> getList(String sql, Class<T> returnType,
            Object... paramValue) {
        RowMapper<T> rowMapper = new BeanPropertyRowMapper<T>(returnType);
        return this.getJdbcTemplate().query(sql, rowMapper, paramValue);
    }

    protected List<T> getList(String sql, Class<T> returnType) {
        RowMapper<T> rowMapper = new BeanPropertyRowMapper<T>(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<T> 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;
    }
}

标签: 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Java 中调用wget 的 例子

下一篇:STL_算法_局部排序(partial_sort、partial_sort_copy)