您的位置:首页 > 其它

Hibernate泛型DAO设计

2011-08-31 00:16 295 查看
泛型是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. }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: