BaseDao的封装



BaseDao的封装

年02月17日 22:56:46 csdn_kenneth 阅读数:509
  1. import java.io.Serializable;
  2. import java.util.List;
  3. import org.hibernate.criterion.DetachedCriteria;
  4. public interface BaseDao<T> {
  5. //增
  6. void save(T t);
  7. //删
  8. void delete(T t);
  9. //删
  10. void delete(Serializable id);
  11. //改
  12. void update(T t);
  13. //查 根据id查询
  14. T getById(Serializable id);
  15. //查 符合条件的总记录数
  16. Integer getTotalCount(DetachedCriteria dc);
  17. //查 查询分页列表数据
  18. List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize);
  19. }
  1. import java.io.Serializable;
  2. import java.lang.reflect.ParameterizedType;
  3. import java.lang.reflect.Type;
  4. import java.util.List;
  5. import org.hibernate.criterion.DetachedCriteria;
  6. import org.hibernate.criterion.Projections;
  7. import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
  8. import cn.itcast.dao.BaseDao;
  9. import cn.itcast.domain.Customer;
  10. public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
  11. private Class clazz;//用于接收运行期泛型类型
  12. public BaseDaoImpl() {
  13. //获得当前类型的带有泛型类型的父类
  14. ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
  15. //获得运行期的泛型类型
  16. clazz = (Class) ptClass.getActualTypeArguments()[0];
  17. }
  18. @Override
  19. public void save(T t) {
  20. getHibernateTemplate().save(t);
  21. }
  22. @Override
  23. public void delete(T t) {
  24. getHibernateTemplate().delete(t);
  25. }
  26. @Override
  27. public void delete(Serializable id) {
  28. T t = this.getById(id);//先取,再删
  29. getHibernateTemplate().delete(t);
  30. }
  31. @Override
  32. public void update(T t) {
  33. getHibernateTemplate().update(t);
  34. }
  35. @Override
  36. public T getById(Serializable id) {
  37. return (T) getHibernateTemplate().get(clazz, id);
  38. }
  39. @Override
  40. public Integer getTotalCount(DetachedCriteria dc) {
  41. //设置查询的聚合函数,总记录数
  42. dc.setProjection(Projections.rowCount());
  43. List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);
  44. //清空之前设置的聚合函数
  45. dc.setProjection(null);
  46. if(list!=null && list.size()>0){
  47. Long count = list.get(0);
  48. return count.intValue();
  49. }else{
  50. return null;
  51. }
  52. }
  53. @Override
  54. public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) {
  55. List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize);
  56. return list;
  57. }
  58. }
  1. import java.util.List;
  2. import org.hibernate.criterion.DetachedCriteria;
  3. import cn.itcast.domain.Customer;
  4. public interface CustomerDao extends BaseDao<Customer> {
  5. }
  1. import java.util.List;
  2. import org.hibernate.criterion.DetachedCriteria;
  3. import org.hibernate.criterion.Projections;
  4. import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
  5. import cn.itcast.dao.CustomerDao;
  6. import cn.itcast.domain.Customer;
  7. public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao {
  8. }

源码