我的hibernate通用dao层

1.BaseDao类:底层的dao接口,提供最基本的CRUD和分页


  1. import java.io.Serializable;  
  2. import java.util.List;  
  3.   
  4. import com.xxx.utils.PageUtil;  
  5.   
  6. public interface BaseDao<E> {  
  7.     public void saveEntity(E e);    
  8.   
  9.     public void updateEntity(E e);    
  10.   
  11.     public void deleteEntity(E e);  
  12.       
  13.     public void deleteEntityById(Serializable id);  
  14.   
  15.     public E loadEntity(final Class<E> class1, final Serializable id);  
  16.   
  17.     public E loadEntityById(Serializable id);  
  18.   
  19.     public List<E> loadListEntities(PageUtil page);  
  20. }  

2.BaseDaoImpl类:BaseDao的实现类

  1. import java.io.Serializable;  
  2. import java.lang.reflect.ParameterizedType;  
  3. import java.sql.SQLException;  
  4. import java.util.List;  
  5.   
  6. import org.hibernate.HibernateException;  
  7. import org.hibernate.Session;  
  8. import org.springframework.orm.hibernate3.HibernateCallback;  
  9. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  10.   
  11. import com.xxx.utils.PageUtil;  
  12.   
  13. public class BaseDaoImpl<E> extends HibernateDaoSupport implements BaseDao<E> {  
  14.       
  15.     private Class cls;     
  16.       
  17.       
  18.     public BaseDaoImpl(){  
  19.         // 就是要获取E的真实数据类型  
  20.         this.cls =  (Class<E>)((ParameterizedType)this.getClass().getGenericSuperclass())  
  21.         .getActualTypeArguments()[0];  
  22.           
  23.     }  
  24.   
  25.   
  26.     public void saveEntity(E e) {  
  27.         this.getHibernateTemplate().save(e);  
  28.           
  29.     }  
  30.   
  31.   
  32.     public void updateEntity(E e) {  
  33.         this.getHibernateTemplate().update(e);  
  34.           
  35.     }  
  36.   
  37.   
  38.     public void deleteEntity(E e) {  
  39.         this.getHibernateTemplate().delete(e);  
  40.           
  41.     }  
  42.   
  43.   
  44.     public E loadEntity(final Class<E> class1,final Serializable id){  
  45.         return this.getHibernateTemplate().get(class1, id);  
  46.           
  47.     }  
  48.   
  49.     @SuppressWarnings("unchecked")  
  50.     public E loadEntityById(Serializable id) {  
  51.         return (E) loadEntity(cls,id);  
  52.     }  
  53.   
  54.   
  55.     @SuppressWarnings("unchecked")  
  56.     public List<E> loadListEntities(final PageUtil page) {  
  57.         return this.getHibernateTemplate().executeFind(new HibernateCallback<List<E>>() {  
  58.             public List<E> doInHibernate(Session session) throws HibernateException, SQLException {  
  59.                 Long totalL = (Long) session.createQuery("select count(*) from "+page.getModelName()).uniqueResult();  
  60.                 page.setTotalCount(totalL.intValue());  
  61.                 return session.createQuery("from " +page.getModelName())  
  62.                         .setFirstResult((page.getPageNow()-1)*page.getPageSize())  
  63.                         .setMaxResults(page.getPageSize()).list();  
  64.             }  
  65.         });  
  66.     }  
  67.   
  68.     public void deleteEntityById(Serializable id) {  
  69.         deleteEntity(loadEntityById(id));  
  70.     }  
  71.   
  72.       
  73. }  

3.UserDao:User对应的dao接口
  1. import com.xxx.model.User;  
  2. public interface UserDao extends BaseDao<User>{  
  3.     //这里还可以自己添加特殊的接口  
  4. }  

4.UserDaoImpl:UserDao的实现类
  1. import org.springframework.stereotype.Component;  
  2.   
  3. import com.xxx.model.User;  
  4. @Component("userDao")   //Spring的注解给新手的说明哦  
  5. public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{  
  6.     //这里还可以自己添加特殊的接口的实现  
  7. }  

5.PageUtil,自己写得分页辅助类,为hibernate的分页使用

  1. import org.springframework.stereotype.Component;  
  2.   
  3. @Component("page")  //spring注解,交给spring管理师最好不过的了,因为是单例嘛,呵呵  
  4. public class PageUtil {  
  5.     private static PageUtil page = null;  
  6.     private String modelName;   //实体名字,比如User,就是写User  
  7.     private int pageNow;        //当前页  
  8.     private int pageSize;       //每页显示个数  
  9.     private int totalCount;     //总数  
  10.   
  11.     private PageUtil() {  
  12.   
  13.     }  
  14.   
  15.     public int getPages() {     //获取总页数  
  16.         return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;  
  17.     }  
  18.   
  19.     public static PageUtil getInstance() {  
  20.         if (null == page) {  
  21.             page = new PageUtil();  
  22.         }  
  23.         return page;  
  24.     }  
  25.   
  26.     public static PageUtil getPage() {  
  27.         return page;  
  28.     }  
  29.   
  30.     public static void setPage(PageUtil page) {  
  31.         PageUtil.page = page;  
  32.     }  
  33.   
  34.     public String getModelName() {  
  35.         return modelName;  
  36.     }  
  37.   
  38.     public void setModelName(String modelName) {  
  39.         this.modelName = modelName;  
  40.     }  
  41.   
  42.     public int getPageNow() {  
  43.         return pageNow;  
  44.     }  
  45.   
  46.     public void setPageNow(int pageNow) {  
  47.         this.pageNow = pageNow;  
  48.     }  
  49.   
  50.     public int getPageSize() {  
  51.         return pageSize;  
  52.     }  
  53.   
  54.     public void setPageSize(int pageSize) {  
  55.         this.pageSize = pageSize;  
  56.     }  
  57.   
  58.     public int getTotalCount() {  
  59.         return totalCount;  
  60.     }  
  61.   
  62.     public void setTotalCount(int totalCount) {  
  63.         this.totalCount = totalCount;  
  64.     }  
  65.   
  66. }  

以上就是个人的通用dao层,只是给大家抛砖,希望大侠们给点意见

至于ssh的引入jar包和各配置文件,请关注我另外的文章,谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值