博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate泛型DAO设计
阅读量:4221 次
发布时间:2019-05-26

本文共 24251 字,大约阅读时间需要 80 分钟。

泛型是JDK1.5的一个新的特性,使用泛型机制编写的程序代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。如果你的系统运行在JDK1.5以上的版本上,建议多使用泛型来代替无休止的对象转换。
         在软件设计中我们开始对系统进行三层甚至是多层架构了,目的是职责更加的明确,功能更加的分离。而常常使用的三层架构就是将表现层、业务逻辑层和持久层进行分离,每一层关注点不同,职能更加的清晰。所以DAO的设计模式现在已经被我们所接受,下面就介绍一下泛型DAO的设计和实现。
         这次的DAO例子是基于接口的.很多工具, 像Hibernate已经提供了数据库的便携访问,所以我们不是为持久层的轻便而设计接口. 然而, DAO接口在较为复杂的应用中更有意义, 当有几个持久化服务被封装到一个持久层的时候, 我想在很多情况下你应该直接使用Hibernate或者JPA, 而使用外加的DAO层最好的理由是为了实现更高的抽象化(例如:定义方法名findAll(String hql)而不是无数次地重复session.createQuery(...))
通用DAO接口:
view plainprint?
   1. package com.baiyyy.util.dao;   
   2.   
   3. import java.io.Serializable;   
   4. import java.util.Collection;   
   5. import java.util.Iterator;   
   6. import java.util.List;   
   7.   
   8. import org.hibernate.Criteria;   
   9. import org.hibernate.LockMode;   
  10. import org.hibernate.criterion.Criterion;   
  11. import org.hibernate.criterion.DetachedCriteria;   
  12.   
  13. /**  
  14. * 承有业务数据的基础访问接口  
  15. * <p>  
  16. * 承有CRUD (创建,读取,修改和删陿)基本数据的操作在这个接口中都是独立的_ 并且承有的DAO都可以使用这些基本实玿  
  17. *  
  18. * @author yongtree  
  19. *  
  20. * @date:2008-03-04  
  21. */   
  22. public interface IBaseDAO<T, ID extends Serializable> {   
  23.   
  24.   /***************************************************************************  
  25.    * -------------------基本棿索?增加?修改?删除操使---------------------------- *  
  26.    **************************************************************************/   
  27.   
  28.   // --------findById()方法是?过get(ID id)得到实体对象-----------------------   
  29.   /**  
  30.    * 通过ID来得到实体对豿  
  31.    *  
  32.    * @param id  
  33.    *            实体对象的标识符  
  34.    * @param lock  
  35.    *            使用的锁模式  
  36.    * @return 该主键忼对应的实体对象  
  37.    */   
  38.   public T findById(ID id, LockMode lock);   
  39.   
  40.   /**  
  41.    * 通过ID来得到实体对豿  
  42.    *  
  43.    * @param id  
  44.    * @return T  
  45.    */   
  46.   public T findById(ID id);   
  47.   
  48.   /**  
  49.    * 通过ID来得到实体对豿(为兼容其他开发成员的原有程序,保留使甿)  
  50.    *  
  51.    * @param c  
  52.    * @param id  
  53.    * @return T  
  54.    */   
  55.   public T findById(Class c, ID id);   
  56.   
  57.   // -------------loadById()是调用hibernate的load方法------------   
  58.   
  59.   public T loadById(ID id);   
  60.   
  61.   /**  
  62.    * 通过id load对象  
  63.    *  
  64.    * @param id  
  65.    * @param lock  
  66.    * @return  
  67.    */   
  68.   public T loadById(ID id, LockMode lock);   
  69.   
  70.   /**  
  71.    * 获取全部的实使  
  72.    *  
  73.    * @return  
  74.    */   
  75.   public List<T> loadAll();   
  76.   
  77.   /**  
  78.    * 保存丿个实体对豿  
  79.    *  
  80.    * @param entity  
  81.    */   
  82.   public T saveEntity(T entity);   
  83.   
  84.   /**  
  85.    * 更新丿个实体对豿  
  86.    *  
  87.    * @param entity  
  88.    */   
  89.   public void updateEntity(T entity);   
  90.   
  91.   public void updateEntity(T entity, LockMode lock);   
  92.   
  93.   /**  
  94.    * 增加或更新集合中的全部实使  
  95.    *  
  96.    * @param entities  
  97.    */   
  98.   public void saveOrUpdateAll(Collection<T> entities);   
  99.   
 100.   /**  
 101.    * 删除丿个实使  
 102.    *  
 103.    * @param entity  
 104.    * @throws Exception  
 105.    */   
 106.   public void deleteEntity(T entity);   
 107.   
 108.   public void deleteEntity(T entity, LockMode lock);   
 109.   
 110.   /**  
 111.    * 根据主键删除指定实体  
 112.    *  
 113.    * @param id  
 114.    */   
 115.   public void deleteEntityById(ID id);   
 116.   
 117.   public void deleteEntityById(ID id, LockMode lock);   
 118.   
 119.   /**  
 120.    * 批量删除  
 121.    *  
 122.    * @param entities  
 123.    */   
 124.   public void deleteAll(Collection<T> entities);   
 125.   
 126.   /**  
 127.    * 通过合并的方式更新对豿  
 128.    *  
 129.    * @param entity  
 130.    *            void  
 131.    */   
 132.   public void merge(T entity);   
 133.   
 134.   /***************************************************************************  
 135.    * ------------------------------使用HQL语句-------------------------------- *  
 136.    **************************************************************************/   
 137.   
 138.   /**  
 139.    * 使用HQL语句进行对象的查诿  
 140.    *  
 141.    * @param hsql  
 142.    *            查询语句  
 143.    * @return 符合条件的对豿  
 144.    */   
 145.   
 146.   public T getEntity(String hsql);   
 147.   
 148.   /**  
 149.    * 使用HQL语句进行查询  
 150.    *  
 151.    * @param hsql  
 152.    *            查询语句  
 153.    * @return 符合条件的对象集吿  
 154.    */   
 155.   public List<T> getEntities(String hsql);   
 156.   
 157.   /**  
 158.    * 使用带参数的HQL语句进行查询  
 159.    *  
 160.    * @param hsql  
 161.    * @param obj  
 162.    * @return  
 163.    */   
 164.   public List<T> getEntities(String hsql, Object[] values);   
 165.   
 166.   public List<T> getEntities(String hql, int start, int number);   
 167.   
 168.   public List<T> getEntities(String hql, int start, int number,   
 169.       Object[] values);   
 170.   
 171.   /**  
 172.    * 使用命名的HQL语句棿索数捿  
 173.    *  
 174.    * @param queryName  
 175.    * @return  
 176.    */   
 177.   public List<T> findByNamedQuery(String queryName);   
 178.   
 179.   /**  
 180.    * 使用带参数的命名HSQL语句棿索数捿  
 181.    *  
 182.    * @param queryName  
 183.    * @param values  
 184.    * @return  
 185.    */   
 186.   public List<T> findByNamedQuery(String queryName, Object[] values);   
 187.   
 188.   /**  
 189.    * 使用带命名参数的命名HSQL语句棿索数捿  
 190.    *  
 191.    * @param queryName  
 192.    * @param paramNames  
 193.    * @param values  
 194.    * @return  
 195.    */   
 196.   public List<T> findByNamedQuery(String queryName, String[] paramNames,   
 197.       Object[] values);   
 198.   
 199.   /**  
 200.    * 使用HQL语句棿索数据,返回 Iterator  
 201.    *  
 202.    * @param queryString  
 203.    * @return  
 204.    */   
 205.   public Iterator<T> iterate(String queryString);   
 206.   
 207.   /**  
 208.    * 使用带参数HSQL语句棿索数据,返回 Iterator  
 209.    *  
 210.    * @param queryString  
 211.    * @param values  
 212.    * @return  
 213.    */   
 214.   public Iterator<T> iterate(String queryString, Object[] values);   
 215.   
 216.   /***************************************************************************  
 217.    * -----------------------------Criteria动濁查诿---------------------------- *  
 218.    **************************************************************************/   
 219.   
 220.   /**   
 221.    * 创建与会话无关的棿索标准对豿   
 222.    */   
 223.   public DetachedCriteria createDetachedCriteria();   
 224.   
 225.   /**  
 226.    * 创建与会话绑定的棿索标准对豿  
 227.    *  
 228.    * @return  
 229.    */   
 230.   public Criteria createCriteria();   
 231.   
 232.   /**  
 233.    * 使用指定的检索标准检索数捿  
 234.    *  
 235.    * @param criteria  
 236.    * @return  
 237.    */   
 238.   public List<T> findByCriteria(DetachedCriteria criteria);   
 239.   
 240.   /**  
 241.    * 使用指定的检索标准检索数据,返回部分记录  
 242.    *  
 243.    * @param criteria  
 244.    * @param firstResult  
 245.    * @param maxResults  
 246.    * @return  
 247.    */   
 248.   public List<T> findByCriteria(DetachedCriteria criteria, int firstResult,   
 249.       int maxResults);   
 250.   
 251.   /**  
 252.    * 通过动濁查询条件进行查诿  
 253.    *  
 254.    * @param criterion  
 255.    * @return List<T>  
 256.    */   
 257.   @SuppressWarnings("unchecked")   
 258.   public List<T> findByCriteria(Criterion... criterion);   
 259.   
 260.   /**  
 261.    * 使用指定的检索标准检索数据,返回指定范围的记彿  
 262.    *  
 263.    * @param criteria  
 264.    * @return  
 265.    */   
 266.   public Integer getRowCount(DetachedCriteria criteria);   
 267.   
 268.   /**  
 269.    * 使用指定的检索标准检索数据,返回指定统计倿  
 270.    *  
 271.    * @param criteria  
 272.    * @param propertyName  
 273.    * @param StatName  
 274.    *            (max,min,avg,sum)  
 275.    * @return  
 276.    */   
 277.   public Object getStatValue(DetachedCriteria criteria, String propertyName,   
 278.       String StatName);   
 279.   
 280.   /**  
 281.    * 通过给定的一个对象,查找与其匹配的对象,表关联比较多时,用户可以自己根据霿要扩展?  
 282.    *  
 283.    * @param entity  
 284.    * @return List<T>  
 285.    */   
 286.   public List<T> findByExample(T entity);   
 287.   
 288.   /***************************************************************************  
 289.    * -------------------------Others ----------------------------------------*  
 290.    **************************************************************************/   
 291.   
 292.   /**  
 293.    * 加锁指定的实使  
 294.    *  
 295.    * @param entity  
 296.    * @param lockMode  
 297.    */   
 298.   public void lock(T entity, LockMode lockMode);   
 299.   
 300.   /**  
 301.    * 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)  
 302.    */   
 303.   public void flush();   
 304.   
 305.   /**  
 306.    * 清空缓存  
 307.    *  
 308.    * void  
 309.    */   
 310.   public void clear();   
 311.   
 312.   /***************************************************************************  
 313.    * --------------------------------相关知识炿--------------------------------*  
 314.    *  
 315.    * 1、Session的load方法和get方法都是通过给定的ID从数据库中加载一个持久化的对象?但两个斿*  
 316.    * 法的区别在于:当数据库不存在于ID对应的记录时,load()方法抛出异常,迌get()方法返回null*  
 317.    ***************************************************************************/   
 318.   
 319. }   
package com.baiyyy.util.dao; import java.io.Serializable; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.LockMode; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; /** * 承有业务数据的基础访问接口 * <p> * 承有CRUD (创建,读取,修改和删陿)基本数据的操作在这个接口中都是独立的_ 并且承有的DAO都可以使用这些基本实玿 * * @author yongtree * * @date:2008-03-04 */ public interface IBaseDAO<T, ID extends Serializable> { /*************************************************************************** * -------------------基本棿索?增加?修改?删除操使---------------------------- * **************************************************************************/ // --------findById()方法是?过get(ID id)得到实体对象----------------------- /** * 通过ID来得到实体对豿 * * @param id * 实体对象的标识符 * @param lock * 使用的锁模式 * @return 该主键忼对应的实体对象 */ public T findById(ID id, LockMode lock); /** * 通过ID来得到实体对豿 * * @param id * @return T */ public T findById(ID id); /** * 通过ID来得到实体对豿(为兼容其他开发成员的原有程序,保留使甿) * * @param c * @param id * @return T */ public T findById(Class c, ID id); // -------------loadById()是调用hibernate的load方法------------ public T loadById(ID id); /** * 通过id load对象 * * @param id * @param lock * @return */ public T loadById(ID id, LockMode lock); /** * 获取全部的实使 * * @return */ public List<T> loadAll(); /** * 保存丿个实体对豿 * * @param entity */ public T saveEntity(T entity); /** * 更新丿个实体对豿 * * @param entity */ public void updateEntity(T entity); public void updateEntity(T entity, LockMode lock); /** * 增加或更新集合中的全部实使 * * @param entities */ public void saveOrUpdateAll(Collection<T> entities); /** * 删除丿个实使 * * @param entity * @throws Exception */ public void deleteEntity(T entity); public void deleteEntity(T entity, LockMode lock); /** * 根据主键删除指定实体 * * @param id */ public void deleteEntityById(ID id); public void deleteEntityById(ID id, LockMode lock); /** * 批量删除 * * @param entities */ public void deleteAll(Collection<T> entities); /** * 通过合并的方式更新对豿 * * @param entity * void */ public void merge(T entity); /*************************************************************************** * ------------------------------使用HQL语句-------------------------------- * **************************************************************************/ /** * 使用HQL语句进行对象的查诿 * * @param hsql * 查询语句 * @return 符合条件的对豿 */ public T getEntity(String hsql); /** * 使用HQL语句进行查询 * * @param hsql * 查询语句 * @return 符合条件的对象集吿 */ public List<T> getEntities(String hsql); /** * 使用带参数的HQL语句进行查询 * * @param hsql * @param obj * @return */ public List<T> getEntities(String hsql, Object[] values); public List<T> getEntities(String hql, int start, int number); public List<T> getEntities(String hql, int start, int number, Object[] values); /** * 使用命名的HQL语句棿索数捿 * * @param queryName * @return */ public List<T> findByNamedQuery(String queryName); /** * 使用带参数的命名HSQL语句棿索数捿 * * @param queryName * @param values * @return */ public List<T> findByNamedQuery(String queryName, Object[] values); /** * 使用带命名参数的命名HSQL语句棿索数捿 * * @param queryName * @param paramNames * @param values * @return */ public List<T> findByNamedQuery(String queryName, String[] paramNames, Object[] values); /** * 使用HQL语句棿索数据,返回 Iterator * * @param queryString * @return */ public Iterator<T> iterate(String queryString); /** * 使用带参数HSQL语句棿索数据,返回 Iterator * * @param queryString * @param values * @return */ public Iterator<T> iterate(String queryString, Object[] values); /*************************************************************************** * -----------------------------Criteria动濁查诿---------------------------- * **************************************************************************/ /** * 创建与会话无关的棿索标准对豿 */ public DetachedCriteria createDetachedCriteria(); /** * 创建与会话绑定的棿索标准对豿 * * @return */ public Criteria createCriteria(); /** * 使用指定的检索标准检索数捿 * * @param criteria * @return */ public List<T> findByCriteria(DetachedCriteria criteria); /** * 使用指定的检索标准检索数据,返回部分记录 * * @param criteria * @param firstResult * @param maxResults * @return */ public List<T> findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults); /** * 通过动濁查询条件进行查诿 * * @param criterion * @return List<T> */ @SuppressWarnings("unchecked") public List<T> findByCriteria(Criterion... criterion); /** * 使用指定的检索标准检索数据,返回指定范围的记彿 * * @param criteria * @return */ public Integer getRowCount(DetachedCriteria criteria); /** * 使用指定的检索标准检索数据,返回指定统计倿 * * @param criteria * @param propertyName * @param StatName * (max,min,avg,sum) * @return */ public Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName); /** * 通过给定的一个对象,查找与其匹配的对象,表关联比较多时,用户可以自己根据霿要扩展? * * @param entity * @return List<T> */ public List<T> findByExample(T entity); /*************************************************************************** * -------------------------Others ----------------------------------------* **************************************************************************/ /** * 加锁指定的实使 * * @param entity * @param lockMode */ public void lock(T entity, LockMode lockMode); /** * 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新) */ public void flush(); /** * 清空缓存 * * void */ public void clear(); /*************************************************************************** * --------------------------------相关知识炿--------------------------------* * * 1、Session的load方法和get方法都是通过给定的ID从数据库中加载一个持久化的对象?但两个斿* * 法的区别在于:当数据库不存在于ID对应的记录时,load()方法抛出异常,迌get()方法返回null* ***************************************************************************/ }
 
设计完接口,我们就要实现我们创建的接口,我们如果使用Hibernate,那么就做一个hibernate的实现,如果使用JPA,那么就做一个JPA实现。以下采用hibernate进行实现。
通用Hibernate DAO实现:
view plainprint?
   1. package com.baiyyy.util.dao;   
   2.   
   3. /**  
   4. * @filename:BaseHibernateDAO.java  
   5. */   
   6.   
   7. import java.io.Serializable;   
   8. import java.util.Collection;   
   9. import java.util.Iterator;   
  10. import java.util.List;   
  11.   
  12. import org.hibernate.Criteria;   
  13. import org.hibernate.LockMode;   
  14. import org.hibernate.Query;   
  15. import org.hibernate.Session;   
  16. import org.hibernate.criterion.Criterion;   
  17. import org.hibernate.criterion.DetachedCriteria;   
  18. import org.hibernate.criterion.Example;   
  19. import org.hibernate.criterion.MatchMode;   
  20. import org.hibernate.criterion.Projections;   
  21.   
  22. import com.baiyyy.workflow.pojo.TWfPackage;   
  23.   
  24. /**  
  25. * 用Hibernate实现通用DAO接口  
  26. *  
  27. * @author yongtree  
  28. * @date 2008-3-10  
  29. * @param <T>  
  30. * @param <ID>  
  31. */   
  32. public class BaseHibernateDAO<T, ID extends Serializable> implements   
  33.     IBaseDAO<T, ID> {   
  34.   // 保持实体对象类的类型   
  35.   private Class<T> persistentClass;   
  36.   
  37.   private Session session;   
  38.   
  39.   /**  
  40.    *    */   
  41.   @SuppressWarnings("unchecked")   
  42.   public BaseHibernateDAO() {   
  43.     //下面这种方式丿直有错误,不能得到真正的T.class,迌是Object.class   
  44.     // this.persistentClass=GenericsUtils.getSuperClassGenricType(getClass());   
  45.     // System.out.println(obj.getClass().getName());   
  46.   }   
  47.   
  48.   @SuppressWarnings("unchecked")   
  49.   public BaseHibernateDAO(Class clazz) {   
  50.     this.persistentClass = clazz;   
  51.   }   
  52.   
  53.   /**  
  54.    * @param session  
  55.    *            the session to set  
  56.    */   
  57.   public void setSession(Session session) {   
  58.     this.session = session;   
  59.   }   
  60.   
  61.   /**  
  62.    * 得到当前线程的Session对象的实便  
  63.    *  
  64.    * @return  
  65.    */   
  66.   protected Session getSession() {   
  67.     System.out.println("get session");   
  68.     return HibernateUtil.getCurrentSession();   
  69.   }   
  70.   
  71.   /**  
  72.    * 得到持久化对象的类型  
  73.    *  
  74.    * @return 持久化类的类垿  
  75.    */   
  76.   protected Class<T> getPersistentClass() {   
  77.     return persistentClass;   
  78.   }   
  79.   
  80.   @SuppressWarnings("unchecked")   
  81.   public T findById(ID id, LockMode lock) {   
  82.     // TODO Auto-generated method stub   
  83.     T entity = (T) getSession().get(getPersistentClass(), id, lock);   
  84.     if (entity != null) {   
  85.       this.flush();   
  86.     }   
  87.   
  88.     return entity;   
  89.   }   
  90.   
  91.   @SuppressWarnings("unchecked")   
  92.   public T findById(Class c, ID id) {   
  93.     // TODO Auto-generated method stub   
  94.     T entity;   
  95.   
  96.     entity = (T) getSession().get(c, id);   
  97.   
  98.     return entity;   
  99.   }   
 100.   
 101.   @SuppressWarnings("unchecked")   
 102.   public T findById(ID id) {   
 103.     // TODO Auto-generated method stub   
 104.     T entity = (T) getSession().get(getPersistentClass(), id);   
 105.   
 106.     return entity;   
 107.   }   
 108.   
 109.   @SuppressWarnings("unchecked")   
 110.   public T loadById(ID id) {   
 111.     // TODO Auto-generated method stub   
 112.     T entity = (T) getSession().load(getPersistentClass(), id);   
 113.     return entity;   
 114.   }   
 115.   
 116.   @SuppressWarnings("unchecked")   
 117.   public T loadById(Class c, ID id) {   
 118.     // TODO Auto-generated method stub   
 119.     T entity = (T) getSession().load(c, id);   
 120.     return entity;   
 121.   }   
 122.   
 123.   @SuppressWarnings("unchecked")   
 124.   public T loadById(ID id, LockMode lock) {   
 125.     // TODO Auto-generated method stub   
 126.     T entity = (T) getSession().load(getPersistentClass(), id, lock);   
 127.     return entity;   
 128.   }   
 129.   
 130.   @SuppressWarnings("unchecked")   
 131.   public List<T> loadAll() {   
 132.     List<T> list = getSession().createQuery(   
 133.         "from " + getPersistentClass().getName()).list();   
 134.     return list;   
 135.   }   
 136.   
 137.   public T saveEntity(T entity) {   
 138.     // TODO Auto-generated method stub   
 139.   
 140.     getSession().save(entity);   
 141.     this.flush();   
 142.     return entity;   
 143.   }   
 144.   
 145.   public void updateEntity(T entity) {   
 146.     // TODO Auto-generated method stub   
 147.     getSession().saveOrUpdate(entity);   
 148.     this.flush();   
 149.   }   
 150.   
 151.   /**  
 152.    * 该实现类暂时没有实现更新加锁的操使  
 153.    */   
 154.   public void updateEntity(T entity, LockMode lock) {   
 155.     // TODO Auto-generated method stub   
 156.     getSession().saveOrUpdate(entity);   
 157.     this.flush();   
 158.   }   
 159.   
 160.   public void saveOrUpdateAll(Collection<T> entities) {   
 161.     getSession().saveOrUpdate(entities);   
 162.     this.flush();   
 163.   }   
 164.   
 165.   public void deleteEntity(T entity) {   
 166.     // TODO Auto-generated method stub   
 167.     getSession().delete(entity);   
 168.     this.flush();   
 169.   }   
 170.   
 171.   /**  
 172.    * 该实现没有实现加锁删除对象的操作,在spring的DAO实现中已经实玿  
 173.    */   
 174.   public void deleteEntity(T entity, LockMode lock) {   
 175.     // TODO Auto-generated method stub   
 176.     getSession().delete(entity);   
 177.     this.flush();   
 178.   }   
 179.   
 180.   public void deleteEntityById(ID id) {   
 181.     this.deleteEntity(this.loadById(id));   
 182.     this.flush();   
 183.   }   
 184.   
 185.   // 该实现没有实现加锁的删除,在spring的dao中已经实现了   
 186.   public void deleteEntityById(ID id, LockMode lock) {   
 187.     this.deleteEntity(this.loadById(id));   
 188.     this.flush();   
 189.   }   
 190.   
 191.   public void deleteAll(Collection<T> entities) {   
 192.     this.flush();   
 193.     getSession().delete(entities);   
 194.   }   
 195.     
 196.   public void merge(T entity){   
 197.     getSession().merge(entity);   
 198.     this.flush();   
 199.   }   
 200.   
 201.   @SuppressWarnings("unchecked")   
 202.   public T getEntity(String hsql) {   
 203.     T uniqueResult = (T) getSession().createQuery(hsql).uniqueResult();   
 204.     // TODO Auto-generated method stub   
 205.     return uniqueResult;   
 206.   }   
 207.   
 208.   @SuppressWarnings("unchecked")   
 209.   public List<T> getEntities(String hsql) {   
 210.     // TODO Auto-generated method stub   
 211.   
 212.     List list = getSession().createQuery(hsql).list();   
 213.     return list;   
 214.   }   
 215.   
 216.   @SuppressWarnings("unchecked")   
 217.   public List<T> getEntities(String hql, int start, int number,   
 218.       Object[] values) {   
 219.     // TODO Auto-generated method stub   
 220.     Query query = getSession().createQuery(hql);   
 221.     for (int i = 0; i < values.length; i++) {   
 222.       query.setParameter(i, values[i]);   
 223.     }   
 224.     query.setFirstResult(start);   
 225.     query.setMaxResults(number);   
 226.     List list = query.list();   
 227.     return list;   
 228.   }   
 229.   
 230.   @SuppressWarnings("unchecked")   
 231.   public List<T> getEntities(String hql, int start, int number) {   
 232.     // TODO Auto-generated method stub   
 233.     Query query = getSession().createQuery(hql);   
 234.     query.setFirstResult(start);   
 235.     query.setMaxResults(number);   
 236.     List list = query.list();   
 237.     return list;   
 238.   }   
 239.   
 240.   @SuppressWarnings("unchecked")   
 241.   public List<T> getEntities(String hql, Object[] values) {   
 242.     // TODO Auto-generated method stub   
 243.     Query query = getSession().createQuery(hql);   
 244.     for (int i = 0; i < values.length; i++) {   
 245.       query.setParameter(i, values[i]);   
 246.     }   
 247.     return query.list();   
 248.   }   
 249.   
 250.   @SuppressWarnings("unchecked")   
 251.   public List<T> findByNamedQuery(String queryName) {   
 252.     // TODO Auto-generated method stub   
 253.     return getSession().getNamedQuery(queryName).list();   
 254.   }   
 255.   
 256.   @SuppressWarnings("unchecked")   
 257.   public List<T> findByNamedQuery(String queryName, Object[] values) {   
 258.     // TODO Auto-generated method stub   
 259.     Query query = getSession().getNamedQuery(queryName);   
 260.     for (int i = 0; i < values.length; i++) {   
 261.       query.setParameter(i, values);   
 262.     }   
 263.     return query.list();   
 264.   }   
 265.   
 266.   /**  
 267.    * 注意:该方法是?过设置参数来进行命名查询,承以在传参数时,一定要注意paramNames和values的长度,位置要一丿对应?  
 268.    */   
 269.   @SuppressWarnings("unchecked")   
 270.   public List<T> findByNamedQuery(String queryName, String[] paramNames,   
 271.       Object[] values) {   
 272.     // TODO Auto-generated method stub   
 273.     Query query = getSession().getNamedQuery(queryName);   
 274.     for (int i = 0; i < paramNames.length; i++) {   
 275.       query.setParameter(paramNames[i], values[i]);   
 276.     }   
 277.     return query.list();   
 278.   }   
 279.   
 280.   @SuppressWarnings("unchecked")   
 281.   public Iterator<T> iterate(String hql) {   
 282.     // TODO Auto-generated method stub   
 283.     return getSession().createQuery(hql).iterate();   
 284.   }   
 285.   
 286.   @SuppressWarnings("unchecked")   
 287.   public Iterator<T> iterate(String hql, Object[] values) {   
 288.     // TODO Auto-generated method stub   
 289.     Query query = getSession().createQuery(hql);   
 290.     for (int i = 0; i < values.length; i++) {   
 291.       query.setParameter(i, values[i]);   
 292.     }   
 293.     return query.iterate();   
 294.   }   
 295.   
 296.   public DetachedCriteria createDetachedCriteria() {   
 297.     // TODO Auto-generated method stub   
 298.     return DetachedCriteria.forClass(this.persistentClass);   
 299.   }   
 300.   
 301.   public Criteria createCriteria() {   
 302.     // TODO Auto-generated method stub   
 303.     return this.createDetachedCriteria().getExecutableCriteria(   
 304.         this.getSession());   
 305.   }   
 306.   
 307.   /**  
 308.    * 该方法没有经过验证,不能保证正确,在spring的实现中已经实现亿  
 309.    */   
 310.   @SuppressWarnings("unchecked")   
 311.   public List<T> findByCriteria(DetachedCriteria criteria) {   
 312.     // TODO Auto-generated method stub   
 313.     return criteria.getExecutableCriteria(this.getSession()).list();   
 314.   }   
 315.   
 316.   @SuppressWarnings("unchecked")   
 317.   public List<T> findByCriteria(DetachedCriteria criteria, int firstResult,   
 318.       int maxResults) {   
 319.     // TODO Auto-generated method stub   
 320.     return criteria.getExecutableCriteria(this.getSession())   
 321.         .setFirstResult(firstResult).setMaxResults(maxResults).list();   
 322.   
 323.   }   
 324.   
 325.   /**  
 326.    * 动濁查诿  
 327.    *  
 328.    * @param criterion  
 329.    * @return  
 330.    */   
 331.   public @SuppressWarnings("unchecked")   
 332.   List<T> findByCriteria(Criterion... criterion) {   
 333.     Criteria crit = getSession().createCriteria(getPersistentClass());   
 334.     for (Criterion c : criterion) {   
 335.   
 336.       if (c != null) {   
 337.   
 338.         crit.add(c);   
 339.   
 340.       }   
 341.     }   
 342.     List list = crit.list();   
 343.     return list;   
 344.   }   
 345.   
 346.   @SuppressWarnings("unchecked")   
 347.   public Integer getRowCount(DetachedCriteria criteria) {   
 348.     // TODO Auto-generated method stub   
 349.     criteria.setProjection(Projections.rowCount());   
 350.     List list = this.findByCriteria(criteria, 0, 1);   
 351.     return (Integer) list.get(0);   
 352.   
 353.   }   
 354.   
 355.   @SuppressWarnings("unchecked")   
 356.   public Object getStatValue(DetachedCriteria criteria, String propertyName,   
 357.       String StatName) {   
 358.     // TODO Auto-generated method stub   
 359.     if (StatName.toLowerCase().equals("max"))   
 360.       criteria.setProjection(Projections.max(propertyName));   
 361.     else if (StatName.toLowerCase().equals("min"))   
 362.       criteria.setProjection(Projections.min(propertyName));   
 363.     else if (StatName.toLowerCase().equals("avg"))   
 364.       criteria.setProjection(Projections.avg(propertyName));   
 365.     else if (StatName.toLowerCase().equals("sum"))   
 366.       criteria.setProjection(Projections.sum(propertyName));   
 367.     else   
 368.       return null;   
 369.     List list = this.findByCriteria(criteria, 0, 1);   
 370.     return list.get(0);   
 371.   }   
 372.   
 373.   @SuppressWarnings("unchecked")   
 374.   public List<T> findByExample(T exampleInstance) {   
 375.     // TODO Auto-generated method stub   
 376.     Criteria crit = getSession().createCriteria(getPersistentClass());   
 377.     Example example = Example.create(exampleInstance);   
 378.     example.ignoreCase().enableLike(MatchMode.ANYWHERE);// 忽略大小写,并进行模糊比辿   
 379.     example.excludeZeroes();// 对于属濧中有数字类型的,如果exampleInstance的属性忼为0,就把它添加到查询中   
 380.     crit.add(example);   
 381.     return crit.list();   
 382.   
 383.   }   
 384.   
 385.   public void lock(T entity, LockMode lockMode) {   
 386.     // TODO Auto-generated method stub   
 387.     getSession().lock(entity, lockMode);   
 388.   }   
 389.   
 390.   public void flush() {   
 391.     // TODO Auto-generated method stub   
 392.     getSession().flush();   
 393.   }   
 394.   
 395.   public void clear() {   
 396.     // TODO Auto-generated method stub   
 397.     getSession().clear();   
 398.   }   
 399.   
 400. }  

转载地址:http://rdlmi.baihongyu.com/

你可能感兴趣的文章
libgdx: 2D Particle Editor工具使用
查看>>
eclipse 给jar库添加源码
查看>>
3.0正式版环境搭建(4)-- 运行(3)创建的工程
查看>>
C++ 枚举声明 enum 和 enum class
查看>>
Python optionParser模块的使用方法
查看>>
android 消灭星星出错
查看>>
PyCharm 教程(三)Hello world!
查看>>
PyCharm: 显示源码行号
查看>>
cocos2dx使用第三方字库.ttf,需要注意的事项
查看>>
cocos2dx 音频模块分析(4): 音效部分
查看>>
cocos2dx 音频模块分析(5): 音效部分
查看>>
19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、
查看>>
cocos2.X版本lua端使用定时器的方法
查看>>
lua math.fmod使用注意小数问题
查看>>
lua 时间转化
查看>>
lua学习笔记之五(Lua中的数学库)
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第三篇:我的舍与得的2014[张振华.Jack]
查看>>