泛型dao架构实现,封装crud等基本操作

本文介绍了一个使用泛型改进的程序架构,包括BaseDAO接口与其实现类BaseDAOHibernate,以及BaseManager接口与BaseManagerImpl实现类。通过泛型增强了代码的复用性和类型安全性。

今天闲着没事,根据公司的框架中的程序架构进行了修改增加了泛型实现

 

其中包括4个基类 BaseDao.java, BaseDAOHibernate.java,BaseManager.java,BaseManagerImpl.java

 

1. dao接口基类

 

Java代码
  1. /**  
  2.  * BaseDAO.java  
  3.  *  
  4.  *  
  5.  */   
  6. package  com.easou.ad.dao;  
  7.   
  8. import  java.util.HashMap;  
  9. import  java.util.List;  
  10.   
  11. public   interface  BaseDAO<E> {  
  12.   
  13.     /**  
  14.      * 根据主键获得实体  
  15.      *   
  16.      * @param id 实体主键  
  17.      * @return BaseEntity  
  18.      */   
  19.     E getEntity(Long id);  
  20.   
  21.     /**  
  22.      * 获得所有实体  
  23.      *   
  24.      * @return List  
  25.      */   
  26.     List<E> getAllEntity();  
  27.   
  28.     /**  
  29.      * 保存实体  
  30.      *   
  31.      * @param entity pojo instance  
  32.      */   
  33.     void  saveEntity(E entity);  
  34.   
  35.     /**  
  36.      * 根据主键删除实体  
  37.      *   
  38.      * @param id 实体主键  
  39.      */   
  40.     void  removeEntity(Long id);  
  41.   
  42.     public  List<E> search(HashMap con , int  page, int  rowsPerPage);  
  43.     public  List<E> search(HashMap con);  
  44. }  
/**
 * BaseDAO.java
 *
 *
 */
package com.easou.ad.dao;

import java.util.HashMap;
import java.util.List;

public interface BaseDAO<E> {

    /**
     * 根据主键获得实体
     * 
     * @param id 实体主键
     * @return BaseEntity
     */
    E getEntity(Long id);

    /**
     * 获得所有实体
     * 
     * @return List
     */
    List<E> getAllEntity();

    /**
     * 保存实体
     * 
     * @param entity pojo instance
     */
    void saveEntity(E entity);

    /**
     * 根据主键删除实体
     * 
     * @param id 实体主键
     */
    void removeEntity(Long id);

    public List<E> search(HashMap con ,int page,int rowsPerPage);
	public List<E> search(HashMap con);
}

 

2. dao实现类

 

Java代码
  1. /**  
  2.  * BaseDAOHibernate.java  
  3.  *  
  4.  *Copyright 2007 easou, Inc. All Rights Reserved.  
  5.  */   
  6. package  com.easou.ad.dao.hibernate;  
  7.   
  8. import  java.lang.reflect.ParameterizedType;  
  9. import  java.util.List;  
  10.   
  11. import  org.apache.commons.logging.Log;  
  12. import  org.apache.commons.logging.LogFactory;  
  13. import  org.hibernate.HibernateException;  
  14. import  org.hibernate.Query;  
  15. import  org.hibernate.Session;  
  16. import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  17.   
  18.   
  19. import  com.easou.framework.util.PageList;  
  20. import  com.easou.ad.dao.BaseDAO;  
  21.   
  22.   
  23. public   abstract   class  BaseDAOHibernate<E>  extends  HibernateDaoSupport  implements   
  24.         BaseDAO<E> {  
  25.     protected   final  Log log = LogFactory.getLog( this .getClass().getName());  
  26.     protected  Class<E> clazz;  
  27.    
  28.     public  BaseDAOHibernate() {  
  29.        
  30.         this .clazz =(Class<E>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[ 0 ];       
  31.     }  
  32.     /**  
  33.      * 根据主键获得实体  
  34.      *   
  35.      * @param id 实体主键  
  36.      * @return 实体对象  
  37.      */   
  38.     @SuppressWarnings ( "unchecked" )  
  39.     public   final  E getEntity( final  Long id) {  
  40.         return  (E)getHibernateTemplate().get(clazz, id);  
  41.     }  
  42.   
  43.     /**  
  44.      * 获得所有实体  
  45.      *   
  46.      * @return List  
  47.      */   
  48.     @SuppressWarnings ( "unchecked" )  
  49.     public   final  List<E> getAllEntity() {  
  50.         PageList result = new  PageList();  
  51.         List l = getHibernateTemplate().loadAll(clazz);  
  52.         result.addAll(l);  
  53.         result.setCurrentPage(1 );  
  54.         result.setPageCount(1 );  
  55.         result.setTotalRowCount(l.size());  
  56.         return  result;  
  57.     }  
  58.   
  59.     /**  
  60.      * 保存实体  
  61.      *   
  62.      * @param entity 实体对象  
  63.      */   
  64.     public   final   void  saveEntity( final  E entity) {   
  65.             getHibernateTemplate().saveOrUpdate(entity);  
  66.     }  
  67.   
  68.     /**  
  69.      * 根据主键删除实体  
  70.      *   
  71.      * @param id 实体主键  
  72.      */   
  73.     public   final   void  removeEntity( final  Long id) {  
  74.         Object o = getEntity(id);  
  75.         if  ( null  != o) {  
  76.             getHibernateTemplate().delete(o);  
  77.         }  
  78.     }  
  79.   
  80.     /**  
  81.      * 执行批量更新和删除操作的HQL  
  82.      *   
  83.      * @param sql hql语句  
  84.      * @return PageList  
  85.      */   
  86.     @SuppressWarnings ( "unchecked" )  
  87.     protected   final  List<E> executeHQL( final  String sql) {  
  88.         Session session = null ;  
  89.         List<E> ret = null ;  
  90.         try  {  
  91.             log.info(sql);  
  92.             session = this .getSession();  
  93.             if  (sql.toUpperCase().startsWith( "DELETE" )  
  94.                     || sql.toUpperCase().startsWith("UPDATE" )) {  
  95.                 session.createQuery(sql).executeUpdate();  
  96.             } else  {  
  97.                 ret = session.createQuery(sql).list();  
  98.             }  
  99.         } catch  (HibernateException e) {  
  100.             log.error("executeHQL() error:"  + sql, e);  
  101.             throw  convertHibernateAccessException(e);  
  102.         } finally  {  
  103.             this .releaseSession(session);  
  104.         }  
  105.         return  ret;  
  106.     }  
  107.   
  108.     /**  
  109.      * 执行分页查询  
  110.      *   
  111.      * @param selectField HQL语句中,SELECT 的内容(如果设置了此参数值,则sql参数中不可带SELCT语句部分)  
  112.      * @param countField HQL语句中,count 的内容  
  113.      * @param sql HQL语句  
  114.      * @param page 第几页  
  115.      * @param rowsPerPage 每页记录数  
  116.      * @return PageList  
  117.      */   
  118.     @SuppressWarnings ( "unchecked" )  
  119.     protected   final  List<E> pageListQuery( final  String selectField,  
  120.             String countField, String sql, int  page,  int  rowsPerPage) {  
  121.         PageList result = new  PageList();  
  122.         Session session = null ;  
  123.         try  {  
  124.             session = this .getSession();  
  125.             // 预留count的sql语句   
  126.             String countSql = sql.substring(sql.toUpperCase().indexOf("FROM" ));  
  127.             // 设置返回的列,进行查询   
  128.             if  ( null  != selectField) {  
  129.                 sql = "SELECT "  + selectField + sql;  
  130.             }  
  131.             if  (page <=  0 ) {  
  132.                 page = 1// page最小为1   
  133.             }  
  134.             log.debug("query sql:"  + sql);  
  135.             Query q = session.createQuery(sql);  
  136.             if  (rowsPerPage >  0 ) {  // rowsPerPage的值是0或-1时,都返回全部结果集   
  137.                 q.setFirstResult(rowsPerPage * (page - 1 ));  
  138.                 q.setMaxResults(rowsPerPage);  
  139.             }  
  140.   
  141.             result.addAll(q.list());  
  142.   
  143.             // 设置分页查询的列   
  144.             if  ( null  == countField) {  
  145.                 countField = "*" ;  
  146.             }  
  147.   
  148.             int  rowsCount = result.size();  
  149.             if  (rowsPerPage >  1  && rowsCount >  0 ) {  
  150.                 // 每页记录数大于1且结果集大于0才计算分页信息,否则当前页记录数就作为总的记录数   
  151.                 // TODO 解决page值过大,可能导致rowsCount为0的问题   
  152.                 countSql = "select count("  + countField +  ") "  + countSql;  
  153.                 // 计算总记录数时,消除 Order by语句,提高性能   
  154.                 int  oPos = countSql.toUpperCase().indexOf( "ORDER BY" );  
  155.                 if  (oPos >  0 ) {  
  156.                     countSql = countSql.substring(0 , oPos);  
  157.                 }  
  158.                 rowsCount = ((Integer) session.createQuery(countSql).iterate().next()).intValue();  
  159.             }  
  160.   
  161.             if  ( 0  == rowsCount) {  
  162.                 page = 0 ;  
  163.             }  
  164.             if  (rowsPerPage <  0 ) {  
  165.                 page = 1 ;  
  166.                 rowsPerPage = rowsCount;  
  167.             }  
  168.   
  169.             result.setCurrentPage(page);  
  170.             result.setTotalRowCount(rowsCount);  
  171.             result.calcPageCount(rowsPerPage);  
  172.   
  173.         } catch  (HibernateException e) {  
  174.             log.error("pageListQuery() error:"  + sql, e);  
  175.             throw  convertHibernateAccessException(e);  
  176.         } finally  {  
  177.             this .releaseSession(session);  
  178.         }  
  179.         return  result;  
  180.     }  
  181.   
  182.     /**  
  183.      * 执行分页查询  
  184.      *   
  185.      * @param selectField HQL语句中,SELECT 的内容(如果设置了此参数值,则sql参数中不可带SELCT语句部分)  
  186.      * @param sql HQL语句  
  187.      * @param page 第几页  
  188.      * @param rowsPerPage 每页记录数  
  189.      * @param totalRowCount HQL语句获得的总记录数  
  190.      * @return PageList  
  191.      */   
  192.     @SuppressWarnings ( "unchecked" )  
  193.     protected   final  PageList pageListQuery( final  String selectField,  
  194.             String sql, int  page,  int  rowsPerPage,  final   int  totalRowCount) {  
  195.         PageList result = new  PageList();  
  196.         Session session = null ;  
  197.         try  {  
  198.             session = this .getSession();  
  199.             // 设置返回的列,进行查询   
  200.             if  ( null  != selectField) {  
  201.                 sql = "SELECT "  + selectField + sql;  
  202.             }  
  203.             if  (page <=  0 ) {  
  204.                 page = 1// page最小为1   
  205.             }  
  206.   
  207.             Query q = session.createQuery(sql);  
  208.             if  (rowsPerPage >  0 ) {  // rowsPerPage的值是0或-1时,都返回全部结果集   
  209.                 q.setFirstResult(rowsPerPage * (page - 1 ));  
  210.                 q.setMaxResults(rowsPerPage);  
  211.             }  
  212.   
  213.             result.addAll(q.list());  
  214.   
  215.             if  ( 0  == totalRowCount) {  
  216.                 page = 0 ;  
  217.             }  
  218.             if  (rowsPerPage <  0 ) {  
  219.                 page = 1 ;  
  220.                 rowsPerPage = totalRowCount;  
  221.             }  
  222.   
  223.             result.setCurrentPage(page);  
  224.             result.setTotalRowCount(totalRowCount);  
  225.             result.calcPageCount(rowsPerPage);  
  226.   
  227.         } catch  (HibernateException e) {  
  228.             log.error("pageListQuery() error:"  + sql, e);  
  229.             throw  convertHibernateAccessException(e);  
  230.         } finally  {  
  231.             this .releaseSession(session);  
  232.         }  
  233.         return  result;  
  234.     }  
  235.   
  236.     /**  
  237.      * 执行分页查询  
  238.      *   
  239.      * @param sql HQL语句  
  240.      * @param page 第几页  
  241.      * @param rowsPerPage 每页记录数  
  242.      * @param totalRowCount HQL语句获得的总记录数  
  243.      * @return PageList  
  244.      */   
  245.     protected   final  PageList pageListQuery( final  String sql,  final   int  page,  
  246.             final   int  rowsPerPage,  final   int  totalRowCount) {  
  247.         return  pageListQuery( null , sql, page, rowsPerPage, totalRowCount);  
  248.     }  
  249.   
  250.     /**  
  251.      * 执行分页查询  
  252.      *   
  253.      * @param sql HQL语句  
  254.      * @param rowsPerPage 每页记录数  
  255.      * @param page 第几页  
  256.      * @return PageList  
  257.      * @throws HibernateException hibernate 异常  
  258.      */   
  259.     protected  List<E> pageListQuery( final  String sql,  final   int  page,  
  260.             final   int  rowsPerPage)  throws  HibernateException {  
  261.         return  pageListQuery( nullnull , sql, page, rowsPerPage);  
  262.     }  
  263.   
  264.     /**  
  265.      * 执行分页查询  
  266.      *   
  267.      * @param countField HQL语句中,count 的内容  
  268.      * @param sql HQL语句  
  269.      * @param rowsPerPage 每页记录数  
  270.      * @param page 第几页  
  271.      * @return PageList  
  272.      * @throws HibernateException hibernate 异常  
  273.      */   
  274.     protected  List pageListQuery( final  String countField,  final  String sql,  
  275.             final   int  page,  final   int  rowsPerPage)  throws  HibernateException {  
  276.         return  pageListQuery( null , countField, sql, page, rowsPerPage);  
  277.     }  
  278.   
  279.     /**  
  280.      * 计算HQL查询的返回记录数  
  281.      *   
  282.      * @param sql 查询语句  
  283.      * @param countField count语句操作的字段  
  284.      * @return 记录数  
  285.      */   
  286.     protected   int  countHQL(String sql, String countField) {  
  287.   
  288.         int  rowsCount =  0 ;  
  289.         Session session = null ;  
  290.         try  {  
  291.             session = this .getSession();  
  292.             if  ( null  == countField) {  
  293.                 countField = "*" ;  
  294.             }  
  295.             sql = "select count("  + countField +  ") "  + sql;  
  296.             rowsCount = ((Integer) session.createQuery(sql).iterate().next())  
  297.                     .intValue();  
  298.         } catch  (HibernateException e) {  
  299.             log.error("countHQL() error:"  + sql, e);  
  300.             throw  convertHibernateAccessException(e);  
  301.         } finally  {  
  302.             this .releaseSession(session);  
  303.         }  
  304.         return  rowsCount;  
  305.     }  
  306.   
  307.     /**  
  308.      * 计算HQL查询的返回记录数  
  309.      *   
  310.      * @param sql 查询语句  
  311.      * @return 记录数  
  312.      */   
  313.     protected   int  countHQL(String sql) {  
  314.         return  countHQL(sql,  null );  
  315.     }  
  316. }  
/**
 * BaseDAOHibernate.java
 *
 *Copyright 2007 easou, Inc. All Rights Reserved.
 */
package com.easou.ad.dao.hibernate;

import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


import com.easou.framework.util.PageList;
import com.easou.ad.dao.BaseDAO;


public abstract class BaseDAOHibernate<E> extends HibernateDaoSupport implements
        BaseDAO<E> {
    protected final Log log = LogFactory.getLog(this.getClass().getName());
    protected Class<E> clazz;
 
    public BaseDAOHibernate() {
     
        this.clazz =(Class<E>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];     
    }
    /**
     * 根据主键获得实体
     * 
     * @param id 实体主键
     * @return 实体对象
     */
    @SuppressWarnings("unchecked")
	public final E getEntity(final Long id) {
        return (E)getHibernateTemplate().get(clazz, id);
    }

    /**
     * 获得所有实体
     * 
     * @return List
     */
    @SuppressWarnings("unchecked")
    public final List<E> getAllEntity() {
        PageList result = new PageList();
        List l = getHibernateTemplate().loadAll(clazz);
        result.addAll(l);
        result.setCurrentPage(1);
        result.setPageCount(1);
        result.setTotalRowCount(l.size());
        return result;
    }

    /**
     * 保存实体
     * 
     * @param entity 实体对象
     */
    public final void saveEntity(final E entity) { 
            getHibernateTemplate().saveOrUpdate(entity);
    }

    /**
     * 根据主键删除实体
     * 
     * @param id 实体主键
     */
    public final void removeEntity(final Long id) {
        Object o = getEntity(id);
        if (null != o) {
            getHibernateTemplate().delete(o);
        }
    }

    /**
     * 执行批量更新和删除操作的HQL
     * 
     * @param sql hql语句
     * @return PageList
     */
    @SuppressWarnings("unchecked")
	protected final List<E> executeHQL(final String sql) {
        Session session = null;
        List<E> ret = null;
        try {
        	log.info(sql);
            session = this.getSession();
            if (sql.toUpperCase().startsWith("DELETE")
                    || sql.toUpperCase().startsWith("UPDATE")) {
                session.createQuery(sql).executeUpdate();
            } else {
                ret = session.createQuery(sql).list();
            }
        } catch (HibernateException e) {
            log.error("executeHQL() error:" + sql, e);
            throw convertHibernateAccessException(e);
        } finally {
            this.releaseSession(session);
        }
        return ret;
    }

    /**
     * 执行分页查询
     * 
     * @param selectField HQL语句中,SELECT 的内容(如果设置了此参数值,则sql参数中不可带SELCT语句部分)
     * @param countField HQL语句中,count 的内容
     * @param sql HQL语句
     * @param page 第几页
     * @param rowsPerPage 每页记录数
     * @return PageList
     */
    @SuppressWarnings("unchecked")
	protected final List<E> pageListQuery(final String selectField,
            String countField, String sql, int page, int rowsPerPage) {
        PageList result = new PageList();
        Session session = null;
        try {
            session = this.getSession();
            // 预留count的sql语句
            String countSql = sql.substring(sql.toUpperCase().indexOf("FROM"));
            // 设置返回的列,进行查询
            if (null != selectField) {
                sql = "SELECT " + selectField + sql;
            }
            if (page <= 0) {
                page = 1; // page最小为1
            }
            log.debug("query sql:" + sql);
            Query q = session.createQuery(sql);
            if (rowsPerPage > 0) { // rowsPerPage的值是0或-1时,都返回全部结果集
                q.setFirstResult(rowsPerPage * (page - 1));
                q.setMaxResults(rowsPerPage);
            }

            result.addAll(q.list());

            // 设置分页查询的列
            if (null == countField) {
                countField = "*";
            }

            int rowsCount = result.size();
            if (rowsPerPage > 1 && rowsCount > 0) {
                // 每页记录数大于1且结果集大于0才计算分页信息,否则当前页记录数就作为总的记录数
                // TODO 解决page值过大,可能导致rowsCount为0的问题
                countSql = "select count(" + countField + ") " + countSql;
                // 计算总记录数时,消除 Order by语句,提高性能
                int oPos = countSql.toUpperCase().indexOf("ORDER BY");
                if (oPos > 0) {
                    countSql = countSql.substring(0, oPos);
                }
                rowsCount = ((Integer) session.createQuery(countSql).iterate().next()).intValue();
            }

            if (0 == rowsCount) {
                page = 0;
            }
            if (rowsPerPage < 0) {
                page = 1;
                rowsPerPage = rowsCount;
            }

            result.setCurrentPage(page);
            result.setTotalRowCount(rowsCount);
            result.calcPageCount(rowsPerPage);

        } catch (HibernateException e) {
            log.error("pageListQuery() error:" + sql, e);
            throw convertHibernateAccessException(e);
        } finally {
            this.releaseSession(session);
        }
        return result;
    }

    /**
     * 执行分页查询
     * 
     * @param selectField HQL语句中,SELECT 的内容(如果设置了此参数值,则sql参数中不可带SELCT语句部分)
     * @param sql HQL语句
     * @param page 第几页
     * @param rowsPerPage 每页记录数
     * @param totalRowCount HQL语句获得的总记录数
     * @return PageList
     */
    @SuppressWarnings("unchecked")
    protected final PageList pageListQuery(final String selectField,
            String sql, int page, int rowsPerPage, final int totalRowCount) {
        PageList result = new PageList();
        Session session = null;
        try {
            session = this.getSession();
            // 设置返回的列,进行查询
            if (null != selectField) {
                sql = "SELECT " + selectField + sql;
            }
            if (page <= 0) {
                page = 1; // page最小为1
            }

            Query q = session.createQuery(sql);
            if (rowsPerPage > 0) { // rowsPerPage的值是0或-1时,都返回全部结果集
                q.setFirstResult(rowsPerPage * (page - 1));
                q.setMaxResults(rowsPerPage);
            }

            result.addAll(q.list());

            if (0 == totalRowCount) {
                page = 0;
            }
            if (rowsPerPage < 0) {
                page = 1;
                rowsPerPage = totalRowCount;
            }

            result.setCurrentPage(page);
            result.setTotalRowCount(totalRowCount);
            result.calcPageCount(rowsPerPage);

        } catch (HibernateException e) {
            log.error("pageListQuery() error:" + sql, e);
            throw convertHibernateAccessException(e);
        } finally {
            this.releaseSession(session);
        }
        return result;
    }

    /**
     * 执行分页查询
     * 
     * @param sql HQL语句
     * @param page 第几页
     * @param rowsPerPage 每页记录数
     * @param totalRowCount HQL语句获得的总记录数
     * @return PageList
     */
    protected final PageList pageListQuery(final String sql, final int page,
            final int rowsPerPage, final int totalRowCount) {
        return pageListQuery(null, sql, page, rowsPerPage, totalRowCount);
    }

    /**
     * 执行分页查询
     * 
     * @param sql HQL语句
     * @param rowsPerPage 每页记录数
     * @param page 第几页
     * @return PageList
     * @throws HibernateException hibernate 异常
     */
    protected List<E> pageListQuery(final String sql, final int page,
            final int rowsPerPage) throws HibernateException {
        return pageListQuery(null, null, sql, page, rowsPerPage);
    }

    /**
     * 执行分页查询
     * 
     * @param countField HQL语句中,count 的内容
     * @param sql HQL语句
     * @param rowsPerPage 每页记录数
     * @param page 第几页
     * @return PageList
     * @throws HibernateException hibernate 异常
     */
    protected List pageListQuery(final String countField, final String sql,
            final int page, final int rowsPerPage) throws HibernateException {
        return pageListQuery(null, countField, sql, page, rowsPerPage);
    }

    /**
     * 计算HQL查询的返回记录数
     * 
     * @param sql 查询语句
     * @param countField count语句操作的字段
     * @return 记录数
     */
    protected int countHQL(String sql, String countField) {

        int rowsCount = 0;
        Session session = null;
        try {
            session = this.getSession();
            if (null == countField) {
                countField = "*";
            }
            sql = "select count(" + countField + ") " + sql;
            rowsCount = ((Integer) session.createQuery(sql).iterate().next())
                    .intValue();
        } catch (HibernateException e) {
            log.error("countHQL() error:" + sql, e);
            throw convertHibernateAccessException(e);
        } finally {
            this.releaseSession(session);
        }
        return rowsCount;
    }

    /**
     * 计算HQL查询的返回记录数
     * 
     * @param sql 查询语句
     * @return 记录数
     */
    protected int countHQL(String sql) {
        return countHQL(sql, null);
    }
}

 

3. 业务逻辑基类接口

 

Java代码
  1. /**  
  2.  * BaseManager.java  
  3.  *  
  4.  * Copyright 2007 easou, Inc. All Rights Reserved.  
  5.  */   
  6. package  com.easou.ad.bl;  
  7.   
  8. import  java.util.HashMap;  
  9. import  java.util.List;  
  10.   
  11. /**  
  12.  * TODO 业务逻辑基类接口  
  13.  *   
  14.  * Revision History  
  15.  *   
  16.  *   
  17.  */   
  18. public   interface  BaseManager<E> {  
  19.     /**  
  20.      * 根据主键获得实体  
  21.      *   
  22.      * @param id 主键id  
  23.      * @return BaseEntity  
  24.      */   
  25.     E get(Long id);  
  26.   
  27.     /**  
  28.      * 获得所有实体  
  29.      *   
  30.      * @return List  
  31.      */   
  32.     List<E> getAll();  
  33.   
  34.     /**  
  35.      * 保存实体  
  36.      *   
  37.      * @param entity pojo instance  
  38.      */   
  39.     void  save(E entity);  
  40.   
  41.     /**  
  42.      * 根据主键删除实体  
  43.      *   
  44.      * @param id 实体主键  
  45.      */   
  46.     void  remove(Long id);  
  47.   
  48.     /**  
  49.      * 分页搜索  
  50.      * @param con  
  51.      * @param page  
  52.      * @param rowsPerPage  
  53.      * @return  
  54.      */   
  55.     public  List<E> search(HashMap con , int  page, int  rowsPerPage);  
  56.     /**  
  57.      * 搜索  
  58.      * @param con  
  59.      * @return  
  60.      */   
  61.     public  List<E> search(HashMap con);  
  62. }  
/**
 * BaseManager.java
 *
 * Copyright 2007 easou, Inc. All Rights Reserved.
 */
package com.easou.ad.bl;

import java.util.HashMap;
import java.util.List;

/**
 * TODO 业务逻辑基类接口
 * 
 * Revision History
 * 
 * 
 */
public interface BaseManager<E> {
    /**
     * 根据主键获得实体
     * 
     * @param id 主键id
     * @return BaseEntity
     */
    E get(Long id);

    /**
     * 获得所有实体
     * 
     * @return List
     */
    List<E> getAll();

    /**
     * 保存实体
     * 
     * @param entity pojo instance
     */
    void save(E entity);

    /**
     * 根据主键删除实体
     * 
     * @param id 实体主键
     */
    void remove(Long id);

    /**
     * 分页搜索
     * @param con
     * @param page
     * @param rowsPerPage
     * @return
     */
    public List<E> search(HashMap con ,int page,int rowsPerPage);
    /**
     * 搜索
     * @param con
     * @return
     */
	public List<E> search(HashMap con);
}

 4.业务逻辑实现基类

 

Java代码
  1. /**  
  2.  * BaseManagerImpl.java  
  3.  *  
  4.  * Copyright 2007 easou, Inc. All Rights Reserved.  
  5.  */   
  6. package  com.easou.ad.bl.impl;  
  7.   
  8. import  java.util.HashMap;  
  9. import  java.util.List;  
  10.   
  11. import  org.apache.commons.logging.Log;  
  12. import  org.apache.commons.logging.LogFactory;  
  13.   
  14. import  com.easou.ad.bl.BaseManager;  
  15. import  com.easou.ad.dao.BaseDAO;  
  16.   
  17. /**  
  18.  * 业务逻辑基类  
  19.  *   
  20.  * Revision History  
  21.  *   
  22.  *   
  23.  */   
  24. public   class  BaseManagerImpl<E,D  extends  BaseDAO<E>>  implements  BaseManager <E> {  
  25.     protected   final  Log log = LogFactory.getLog(getClass().getName());  
  26.   
  27.     /**  
  28.      * 数据访问接口  
  29.      */   
  30.     protected  D dao;  
  31.   
  32.     /**  
  33.      * @return List 所有实体  
  34.      */   
  35.     public   final  List<E> getAll() {  
  36.         return  dao.getAllEntity();  
  37.     }  
  38.   
  39.     /**  
  40.      * @param id 实体主键  
  41.      * @return 实体  
  42.      */   
  43.     public   final  E get( final  Long id) {  
  44.       
  45.         return  dao.getEntity(id);  
  46.     }  
  47.   
  48.     /**  
  49.      * @param id 实体主键  
  50.      */   
  51.     public   final   void  remove( final  Long id) {  
  52.         dao.removeEntity(id);  
  53.     }  
  54.       
  55.     public  List<E> search(HashMap con,  int  page,  int  rowsPerPage) {  
  56.         return  ((D)dao).search(con, page, rowsPerPage);  
  57.     }  
  58.   
  59.     public  List<E> search(HashMap con) {  
  60.         return  ((D)dao).search(con);  
  61.     }  
  62.     /**  
  63.      * @param entity 实体  
  64.      */   
  65.     public   final   void  save( final  E entity) {  
  66.         dao.saveEntity(entity);  
  67.     }  
  68.   
  69.     /**  
  70.      *   
  71.      * @return 获取泛形  
  72.      */   
  73.     public   final  D getDao() {  
  74.         return  dao;  
  75.     }  
  76.   
  77.     /**  
  78.      *   
  79.      * @param dao 泛形  
  80.      */   
  81.     public   final   void  setDao( final  D dao) {  
  82.         this .dao = dao;  
  83.     }  
  84.       
  85.   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值