zoukankan      html  css  js  c++  java
  • BaseDao设计思想

    BaseDao.java

    public interface BaseDao<T> {
        //
        void save(T t);
        //
        void delete(T t);
        //
        void delete(Serializable id);
        //
        void update(T t);
        //查 根据id查询
        T    getById(Serializable id);
        //查 符合条件的总记录数
        Integer    getTotalCount(DetachedCriteria dc);
        //查 查询分页列表数据
        List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize);
        
    }

     BaseDaoImpl.java

    public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
    
        private Class clazz;//用于接收运行期泛型类型
        public BaseDaoImpl() {
            //获得当前类型的带有泛型类型的父类
            ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
            //获得运行期的泛型类型
            clazz = (Class) ptClass.getActualTypeArguments()[0];
        }
    
        @Override
        public void save(T t) {
            getHibernateTemplate().save(t);
        }
        @Override
        public void delete(T t) {
            getHibernateTemplate().delete(t);
            
        }
    
        @Override
        //Serializable 对象序列化的接口,八大基本类型的父类
        public void delete(Serializable id) {
            T t = this.getById(id);//先取,再删
            getHibernateTemplate().delete(t);
        }
    
        @Override
        public void update(T t) {
            getHibernateTemplate().update(t);
        }
    
        @Override
        public T getById(Serializable id) {
            return (T) getHibernateTemplate().get(clazz, id);
        }
    
        @Override
        public Integer getTotalCount(DetachedCriteria dc) {
            //设置查询的聚合函数,总记录数
            dc.setProjection(Projections.rowCount());
            List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);
            //清空之前设置的聚合函数
            dc.setProjection(null);  
            if(list!=null && list.size()>0){
                Long count = list.get(0);
                return count.intValue();
            }else{
                return null;
            }
            
        }
    
        @Override
        public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) {
            List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize);
            return list;
        }
    
    }
    CustomerDao.java
    public interface CustomerDao  extends BaseDao<Customer>{
    
    }

    CustomerDaoImpl.java

    public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements  CustomerDao{
    
    }
  • 相关阅读:
    B站开源播放框架ijkplayer(iOS版)使用教程
    GitHub前50名的Objective-C动画相关库
    iOS系统自带的 UIAlertView 自动旋转的实现
    iOSAPP启动时实现加载广告
    每周分享第5期(2019.5.4)
    如何为Redis中list中的项设置过期时间
    对scrapy进行单元测试 -- 使用betamax
    【AMAD】betamax -- 一个ruby-VCR的模仿品,只支持requests
    【AMAD】stackprint -- 为Python加入利于调试的traceback信息
    【AMAD】Pysnooper -- 别再用print进行debug了
  • 原文地址:https://www.cnblogs.com/zemul/p/10239883.html
Copyright © 2011-2022 走看看