封裝Springjdbc的通用基類

jopen 12年前發布 | 51K 次閱讀 Spring JEE框架 Springjdbc

一個通用的BaseDao,簡化開發。包括增刪查改以及分頁。

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

}</pre>

測試代碼
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;  
    }  

}</pre></h3>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!