dao层抽取公共的方法

来源:互联网 发布:淘宝激活店铺 编辑:程序博客网 时间:2024/05/29 02:57

1.编写公共dao接口

/** * Created by adimn on 2017/12/16. * 以后所有的DAO接口都需要继承BaseDao接口 * 自定义反省接口 */public interface BaseDao<T> {    void save(T t);    void delete(T t);    void update(T t);    T findById(Long id);    List<T> findAll();    PageBean<T> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria);}

2.实现公共DAO接口

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {    //定义成员属性    private Class clazz;    public BaseDaoImpl(){        //this表示的子类,c就是子类的Class对象        Class c = this.getClass();        //第二部:获取到        Type type = c.getGenericSuperclass();        //目的:把type接口转换成子接口        if(type instanceof ParameterizedType){            ParameterizedType ptype = (ParameterizedType) type;            //获取到类            Type[] types = ptype.getActualTypeArguments();            this.clazz = (Class) types[0];        }    }    /**     *@Date 2017/12/16  9:48     * 添加    */    @Override    public void save(T t) {        this.getHibernateTemplate().save(t);    }    /**     *@Date 2017/12/16  9:48     * 删除    */    @Override    public void delete(T t) {        this.getHibernateTemplate().delete(t);    }    /**     *@Date 2017/12/16  9:48     * 修改    */    @Override    public void update(T t) {        this.getHibernateTemplate().update(t);    }    /**     *@Date 2017/12/16  9:58     * 通过主键查询    */    @Override    public T findById(Long id) {        return (T) this.getHibernateTemplate().get(clazz,id);    }    /**     *@Date 2017/12/16  9:58     * 查询所有的数据    */    @Override    public List<T> findAll() {        return (List<T>) this.getHibernateTemplate().find("from "+clazz.getSimpleName());    }    /**     *@Date 2017/12/16  9:49     * 分页查询    */    @Override    public PageBean<T> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {        //创建分页对象        PageBean<T> page = new PageBean<T>();        //一个一个设置        page.setPageSize(pageSize);        page.setPageCode(pageCode);        //设置查询聚合函数:SQL已经变成了select count(*) from        criteria.setProjection(Projections.rowCount());        List<Number> list = (List<Number>) this.getHibernateTemplate().findByCriteria(criteria);        if(list != null && list.size() > 0){            int totalCount = list.get(0).intValue();            //总记录数            page.setTotalCount(totalCount);        }        //清除SQL select * from        criteria.setProjection(null);        List<T> beanList = (List<T>) this.getHibernateTemplate().findByCriteria(criteria,(pageCode-1)*pageSize,pageSize);        //每页显示的数据        page.setBeanList(beanList);        return page;    }}

3.需要公共方法的DAO直接继承公共DAO

public interface CustomerDao extends BaseDao<Customer>{}

4.方法DAO的实现类要继承公共DAO实现类,并且实现DAO

public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao   {}
原创粉丝点击