本文共 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/