2022年通常使用的Hibernate通常是三种查询及调用 .pdf

上传人:H****o 文档编号:33664888 上传时间:2022-08-12 格式:PDF 页数:12 大小:119.80KB
返回 下载 相关 举报
2022年通常使用的Hibernate通常是三种查询及调用 .pdf_第1页
第1页 / 共12页
2022年通常使用的Hibernate通常是三种查询及调用 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年通常使用的Hibernate通常是三种查询及调用 .pdf》由会员分享,可在线阅读,更多相关《2022年通常使用的Hibernate通常是三种查询及调用 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、相关文章 : SSH通用查询 DAO(2)应用 Hibernate3 的 DetachedCriteria实现分页查询基于 spring 与 hibernate的通用分页实现推荐圈子 : GT-Grid更多相关推荐通常使用的 Hibernate 通常是三种: hql 查询, QBC 查询和 QBE 查询:1、QBE (Qurey By Example )检索方式QBE 是最简单的,但是功能也是最弱的,QBE 的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的查询条件,然后返回匹配的对象。QBE 只支持 =和 like比较运算符,无法不大区间值,及其或的

2、匹配。在这种情况下,还是采用HQL检索方式或 QBC 检索方式。Java 代码1. /* 2. * function 根据传递过来的 Object, 分页显示在数据库中与其匹配的记录3. * param pageNo 4. * 当前页数5. * param pageSize 6. * 每页显示的记录数7. * param object 8. * 将查询条件封装为Object 9. * return 将查询结果封装为Pager 返回10. */ 11.public Pager findPageByExample(int pageNo, int pageSize, Object object) 1

3、2. 13. Pager pager = null; 14. try 15. 16. Criteria criteria = this.getSession().createCriteria( 17. Class.forName(this.getEntity(); 18. 19. if (object != null) 20. 21. criteria.add(Example.create(object).enableLike(); 22. 23. 24. / 获取根据条件分页查询的总行数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -

4、- - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 25. int rowCount = (Integer) criteria.setProjection( 26. Projections.rowCount().uniqueResult(); 27. criteria.setProjection(null); 28. 29. criteria.setFirstResult(pageNo - 1) * pageSize); 30. criteria.setMaxResults(pageSize); 31. 32. List result

5、 = criteria.list(); 33. 34. pager = new Pager(pageSize, pageNo, rowCount, result); 35. 36. catch (RuntimeException re) 37. 38. throw re; 39. finally 40. 41. return pager; 42. 43. 44. 注意代码的第 20 行, 即 criteria.add(Example.create(object).enableLike();这一行,需将 Example.create(object)调用.enableLike()方法,不然不能模糊

6、查询。在 BO层将需要模糊查询的列用 % 串起来,不然仍然和 = 一样。BO层代码:Java 代码1. /* 2. * function 将传递过来的参数封装成抢修人员Bean ,分页查询符合条件的记录3. * param pageNo 4. * 当前的页码5. * param pageSize 6. * 每页显示的记录数7. * param mendName 8. * 抢修人员的名称9. * param specialty 10. * 抢修人员的工种11. * param post 12. * 抢修人员的职称13. * return 将符合条件的记录数以及页码信息封装成PagerBean返回

7、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 14. */ 15.public Pager getInfoByQuery(int pageNo, int pageSize, String mendName, 16. String specialty, String post) 17. 18. 19. EicMend eicMend = new EicMend(); 20. if (mendName != null & men

8、dName.length() 0) 21. 22. eicMend.setMendname(% + mendName + %); 23. 24. if (specialty != null & specialty.length() 0) 25. 26. eicMend.setSpecialty(specialty); 27. 28. if (post != null & post.length() 0) 29. 30. eicMend.setPost(post); 31. 32. 33. Pager pager = erpManagerDao 34. .findPageByExample(pa

9、geNo, pageSize, eicMend); 35. return pager; 36. 执行 SQL语句如下:Sql 代码1. Hibernate: select count (*) as y0_ from YJZX.EIC_MEND this_ where 2. (this_.MENDNAME like ? and this_.POST like ?) 3.4. Hibernate: select * from ( select this_.MENDID as MENDID23_0_, , 5. this_.EXPERTREMARK as EXPERTR28_23_0_ from Y

10、JZX.EIC_MEND this_ where 6. (this_.MENDNAME like ? and this_.POST like ?) ) where rownum = ? 所以只需将需模糊查询的列用“% ”链接即可。2、QBC (Qurey By Criteria)检索方式采用 HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 询语句。 QBC API提

11、供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和 Restrictions接口组成, 它支持在运行时动态生成查询语句。比较常见的是两种传参方式:一种是用map传参,另一种是用Cri terion,不定参数传参。Map传参方式范例如下:DAO 层:Java 代码1. /* 2. * function 分页显示符合所有的记录数,将查询结果封装为Pager 3. * param pageNo 4. * 当前页数5. * param pageSize 6. * 每页显示的条数7. * param map 8. * 将查询条件封装为map 9. * return 查询结果

12、 Pager 10. */ 11.public Pager findPageByCriteria(int pageNo, int pageSize, Map map) 12. 13. Pager pager = null; 14. try 15. 16. Criteria criteria = this.getSession().createCriteria( 17. Class.forName(this.getEntity(); 18. 19. if (map != null) 20. 21. Set keys = map.keySet(); 22. for (String key : ke

13、ys) 23. 24. criteria.add(Restrictions.like(key, map.get(key); 25. 26. 27. 28. / 获取根据条件分页查询的总行数29. int rowCount = (Integer) criteria.setProjection( 30. Projections.rowCount().uniqueResult(); 31. criteria.setProjection(null); 32. 33. criteria.setFirstResult(pageNo - 1) * pageSize); 名师资料总结 - - -精品资料欢迎下

14、载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 34. criteria.setMaxResults(pageSize); 35. 36. List result = criteria.list(); 37. 38. pager = new Pager(pageSize, pageNo, rowCount, result); 39. 40. catch (RuntimeException re) 41. 42. throw re; 43. finally 44.

15、45. return pager; 46. 47. 48. Map传参方式对应 BO层代码:Java 代码1. /* 2. * function 将传递过来的参数封装成抢修人员Bean ,分页查询符合条件的记录3. * param pageNo 4. * 当前的页码5. * param pageSize 6. * 每页显示的记录数7. * param mendName 8. * 抢修人员的名称9. * param specialty 10. * 抢修人员的工种11. * param post 12. * 抢修人员的职称13. * return 将符合条件的记录数以及页码信息封装成PagerBe

16、an返回14. */ 15.public Pager getInfoByQuery2(int pageNo, int pageSize, String mendName, 16. String specialty, String post) 17. 18. 19. Map map = new HashMap(); 20. 21. if (mendName != null & mendName.length() 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页

17、 - - - - - - - - - 22. 23. map.put(mendname, % + mendName + %); 24. 25. if (specialty != null & specialty.length() 0) 26. 27. map.put(specialty, specialty); 28. 29. if (post != null & post.length() 0) 30. 31. map.put(post, post); 32. 33. 34. Pager pager = erpManagerDao.findPageByCriteria(pageNo, pag

18、eSize, map); 35. return pager; 36. 第二种方式: Criterion,不定参数传参方式。其代码如下所示:DAO 层代码:Java 代码1. /* 2. * function 分页显示符合所有的记录数,将查询结果封装为Pager 3. * param pageNo 4. * 当前页数5. * param pageSize 6. * 每页显示的条数7. * param criterions 8. * 不定参数 Criterion 9. * return 查询结果 Pager 10. */ 11.public Pager findPageByCriteria(int

19、 pageNo, int pageSize, 12. Criterion. criterions) 13. 14. Pager pager = null; 15. try 16. 17. Criteria criteria = this.getSession().createCriteria( 18. Class.forName(this.getEntity(); 19. if (criterions != null) 20. 21. for (Criterion criterion : criterions) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -

20、- - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 22. 23. if (criterion != null) 24. 25. criteria.add(criterion); 26. 27. 28. 29. 30. 31. / 获取根据条件分页查询的总行数32. int rowCount = (Integer) criteria.setProjection( 33. Projections.rowCount().uniqueResult(); 34. criteria.setProjection(null)

21、; 35. 36. criteria.setFirstResult(pageNo - 1) * pageSize); 37. criteria.setMaxResults(pageSize); 38. 39. List result = criteria.list(); 40. 41. pager = new Pager(pageSize, pageNo, rowCount, result); 42. 43. catch (RuntimeException re) 44. 45. throw re; 46. finally 47. 48. return pager; 49. 50. 51. C

22、riterion,不定参数传参方式对应BO层代码:Java 代码1. /* 2. * function 将传递过来的参数封装成抢修人员Bean ,分页查询符合条件的记录3. * param pageNo 4. * 当前的页码5. * param pageSize 6. * 每页显示的记录数7. * param mendName 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 8. * 抢修人员的名称9. * param spe

23、cialty 10. * 抢修人员的工种11. * param post 12. * 抢修人员的职称13. * return 将符合条件的记录数以及页码信息封装成PagerBean返回14. */ 15.public Pager getInfoByQuery3(int pageNo, int pageSize, String mendName, 16. String specialty, String post) 17. 18. Criterion criterion1 = null, criterion2 = null, criterion3 = null; 19. if (mendName

24、 != null & mendName.length() 0) 20. 21. criterion1 = Restrictions.ilike(mendname, mendName, 22. MatchMode.ANYWHERE); 23. 24. 25. if (specialty != null & specialty.length() 0) 26. 27. criterion2 = Restrictions.ilike(specialty, specialty,28. MatchMode.EXACT); 29. 30. 31. if (post != null & post.length

25、() 0) 32. 33. criterion3 = Restrictions.ilike(post, post, MatchMode.EXACT); 34. 35. 36. Pager pager = erpManagerDao.findPageByCriteria(pageNo, pageSize, 37. criterion1, criterion2, criterion3); 38. 39. return pager; 40. 3、HQL检索方式HQL (Hibernate Query Language )是面向对象的查询语言,它和SQL查询语言名师资料总结 - - -精品资料欢迎下载

26、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - 有些相识。在 Hibernate 提供的各种检索方式中, HQL是使用最广的一种检索方式。使用 Query 接口分页查询 DAO 代码:Java 代码1. /* 2. * function 分页显示符合所有的记录数,将查询结果封装为Pager 3. * param pageNo 4. * 当前页数5. * param pageSize 6. * 每页显示的条数7. * param instance 8. * 将查询条件

27、封装为专家Bean 9. * return 查询结果 Pager 10. */ 11.public List findPageByQuery(int pageNo, int pageSize, String hql, 12. Map map) 13. 14. List result = null; 15. try 16. 17. Query query = this.getSession().createQuery(hql); 18. 19. Iterator it = map.keySet().iterator(); 20. while (it.hasNext() 21. 22. Objec

28、t key = it.next(); 23. query.setParameter(key.toString(), map.get(key); 24. 25. 26. query.setFirstResult(pageNo - 1) * pageSize); 27. query.setMaxResults(pageSize); 28. 29. result = query.list(); 30. 31. catch (RuntimeException re) 32. 33. throw re; 34. 35. return result; 36. 名师资料总结 - - -精品资料欢迎下载 -

29、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 查询所有记录数的DAO 代码:Java 代码1. /* 2. * function 根据查询条件查询记录数的个数3. * param hql 4. * hql查询语句5. * param map 6. * 用 map封装查询条件7. * return 数据库中满足查询条件的数据的条数8. */ 9. public int getTotalCount(String hql, Map map) 10. 11. try 12. 1

30、3. Query query = this.getSession().createQuery(hql); 14. 15. Iterator it = map.keySet().iterator(); 16. while (it.hasNext() 17. 18. Object key = it.next(); 19. query.setParameter(key.toString(), map.get(key); 20. 21. 22. Integer i = (Integer) query.list().get(0); 23. return i; 24. catch (RuntimeExce

31、ption re) 25. 26. throw re; 27. 28. 29. BO层代码:Java 代码1. /* 2. * function 将传递过来的参数封装成专家Bean,分页查询符合条件的记录3. * param pageNo 4. * 当前的页码5. * param pageSize 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - 6. * 每页显示的记录数7. * param expertName 8. *

32、专家的名称9. * param expertSpecialty 10. * 专家的专业类别11. * param post 12. * 专家的行政职位13. * return 将符合条件的记录数以及页码信息封装成PagerBean返回14. */ 15.public Pager getInfoByQuery(int pageNo, int pageSize, String expertName, 16. String expertSpecialty, String post) 17. 18. StringBuffer hql = new StringBuffer(); 19. hql.appe

33、nd(select count(expertid) from EicExpert where 1=1 ); 20. 21. Map map = new HashMap(); 22. 23. if (expertName != null & expertName.length() 0) 24. 25. map.put(expertname, % + expertName + %); 26. hql.append(and expertname like :expertname ); 27. 28. if (expertSpecialty != null & expertSpecialty.leng

34、th() 0) 29. 30. map.put(expertspecialty, expertSpecialty); 31. hql.append(and expertspecialty like :expertspecialty ); 32. 33. if (post != null & post.length() 0) 34. 35. map.put(post, post); 36. hql.append(and post like :post ); 37. 38. 39. String queryHql = hql.substring(22); 40. List result = erp

35、ManagerDao.findPageByQuery(pageNo, pageSize, 41. queryHql, map); 42. int rowCount = erpManagerDao.getTotalCount(hql.toString(), map); 43. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - 44. Pager pager = new Pager(pageSize, pageNo, rowCou

36、nt, result); 45. return pager; 46. 注:Pager 类是我封装的一个分页类,包含每页显示记录数,当前页,总记录数,每页显示数据的集合。因无关紧要,没有贴出来。另外我不知道Query 接口有没有类似于Criteria那样可以直接在分页查询记录的同时查询出总记录条数,知道的大虾麻烦告诉下哈。在BO里设置不定参数的时候感觉也不太好,不知道大虾们可有比较好的办法。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁