在写项目过程中,发现一个简单的东西,那就是把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层的时候只需要写一次即可。