dao层抽取公共的方法

1.编写公共dao接口

/**
 * Created by adimn on 2017/12/16.
 * 以后所有的DAO接口都需要继承BaseDao接口
 * 自定义反省接口
 */
public interface BaseDao {

    void save(T t);

    void delete(T t);

    void update(T t);

    T findById(Long id);

    List findAll();

    PageBean 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 findAll() {
        return (List) this.getHibernateTemplate().find("from "+clazz.getSimpleName());
    }

    /**
     *@Date 2017/12/16  9:49
     * 分页查询
    */
    @Override
    public PageBean findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {
        //创建分页对象
        PageBean page = new PageBean();
        //一个一个设置
        page.setPageSize(pageSize);
        page.setPageCode(pageCode);

        //设置查询聚合函数:SQL已经变成了select count(*) from
        criteria.setProjection(Projections.rowCount());
        List list = (List) 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 beanList = (List) 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   {
}

你可能感兴趣的:(ssh框架)