夜少少

只为备忘
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

封装Springjdbc的通用基类(copy)

Posted on 2013-04-15 14:22  夜少少  阅读(368)  评论(0编辑  收藏  举报

JDBC基类

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;
    }
}

测试类

package oa.dao;
import java.util.List;

import oa.common.dao.BaseDAO;
import oa.entity.TMember;


import org.springframework.stereotype.Repository;
@Repository
public class TmemberDaoImpl extends BaseDAO implements TmemberDao {

     /* (non-Javadoc)
     * @see oa.dao.TmemberDao#deleteInfo(java.lang.Object)
     */
    @Override  
        public boolean deleteInfo(String id) {  
            String sql="delete from T_MEMBER where MEMBER_ID=?";  
            return this.commonUpdate(sql,id)>0;  
        }  
        /* (non-Javadoc)
         * @see oa.dao.TmemberDao#getAllInfo()
         */
        @Override  
        public List<TMember> getAllInfo() {  
            String sql="select * from T_MEMBER";  
            return this.getList(sql, TMember.class);  
        }  
      
        /* (non-Javadoc)
         * @see oa.dao.TmemberDao#getAllInfoById(java.lang.Object)
         */
        @Override  
        public Object getAllInfoById(String id) {  
            String sql="select * from T_MEMBER where member_id=?";  
            return this.getJavaBean(sql, TMember.class, id);  
        }  
      
        /* (non-Javadoc)
         * @see oa.dao.TmemberDao#insertInfo(java.lang.Object)
         */
        @Override  
        public boolean insertInfo(TMember t) {  
            String sql="insert into T_MEMBER values(?,?,?)";  
            return this.update(sql, t)>0;  
        }  
      
        /* (non-Javadoc)
         * @see oa.dao.TmemberDao#updateInfo(java.lang.Object)
         */
        @Override  
        public boolean updateInfo(TMember t) {  
            String sql="update T_MEMBER set CONTEL=?,EMAILADDR=? where memberId=?";  
            return this.commonUpdate(sql, t.getConTel(),t.getEmailAddr(), t.getMemberId())>0;  
        }  

}