SSH dao层提取之baseDao

在写项目过程中,发现一个简单的东西,那就是把dao层提取出来,封装成baseDao,里面包含增删改查的各种方法,当用到那个dao的时候不用实现,只需要继承baseDao就可以,是不是能方便呢,下面上代码演示:

/**
 * @ClassName: baseDao   
 * @Description: TODO( 通用的增删改查接口类 )   
 * @author liyicheng   
 * @date 2018年8月15日 下午6:47:41
 */
public interface  baseDao<T>{
    /**
     * @Title: save 
     * @Description: TODO( 保存方法 ) 
     * @param @param t    设定文件 
     * @return void    返回类型 
     * @throws
     */
    public void  save(T t);

    /**
     * @Title: delete  
     * @Description: TODO( 通过id删除 ) 
     * @param @param id    设定文件 
     * @return void    返回类型 
     * @throws
     */
    public void delete(Serializable id);
    /**
     * @Title: delete 
     * @Description: TODO( 通过对象删除 ) 
     * @param @param t    设定文件 
     * @return void    返回类型 
     * @throws
     */
    public  void delete(T t);
    /**
     * @Title: update 
     * @Description: TODO( 更新 ) 
     * @param @param t    设定文件 
     * @return void    返回类型 
     * @throws
     */
    public  void update(T t);

    /**
     * @Title: getById 
     * @Description: TODO( 根据id查  ) 
     * @param @param id
     * @param @return    设定文件 
     * @return T    返回类型 
     * @throws
     */
    public T getById(Serializable id);

    /**
     * @Title: getTotalCount 
     * @Description: TODO( 获取总记录数   ) 
     * @param @param dc
     * @param @return    设定文件 
     * @return T    返回类型 
     * @throws
     */
    public Integer getTotalCount(DetachedCriteria dc);

    /**
     * @Title: getList 
     * @Description: TODO( 根据分页获取列表  ) 
     * @param @param dc
     * @param @param firstPage
     * @param @param pageSize
     * @param @return    设定文件 
     * @return List<T>    返回类型 
     * @throws
     */
    List<T> getList(DetachedCriteria dc,Integer firstPage,Integer pageSize);

}

实现类:

public class baseDaoImpl<T> extends HibernateDaoSupport implements baseDao<T>{

    private Class clz;
    //获取当前类的带有泛型的父类的类型
    public baseDaoImpl() {
        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
        clz = (Class) pt.getActualTypeArguments()[0] ;
    }

    @Override
    public void save(T t) {
        getHibernateTemplate().save(t);
    }

    @Override
    public void delete(Serializable id) {
        T t = getById(id);
        getHibernateTemplate().delete(t);
    }

    @Override
    public void delete(T t) {
        getHibernateTemplate().delete(t);
    }

    @Override
    public void update(T t) {
        getHibernateTemplate().update(t);
    }

    @Override
    public T getById(Serializable id) {
        T object = (T) getHibernateTemplate().get(clz, id);
        return object;
    }

    @Override
    public Integer getTotalCount(DetachedCriteria dc) {

        DetachedCriteria count = dc.setProjection(Projections.rowCount());
        List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);
        //清空聚合函数条件
        dc.setProjection(null);
        if(list !=null && list.size()>0){
            return list.get(0).intValue();
        }
        return null;
    }

    @Override
    public List<T> getList(DetachedCriteria dc, Integer firstPage,
            Integer pageSize) {
        List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, firstPage, pageSize);
        return list;
    }


}

比如现在写个userDao,只需这样

public Interface userDao extends baseDao<User>{

}
public class UserDaoImpl extends baseDaoImpl<User> implements userDao{

}

直接在service层调用即可。这样就简化了很多代码,当有好多dao层的时候只需要写一次即可。

猜你喜欢

转载自blog.csdn.net/weixin_38008100/article/details/81910787
ssh