Hibernate分页查询小结.doc_第1页
Hibernate分页查询小结.doc_第2页
Hibernate分页查询小结.doc_第3页
Hibernate分页查询小结.doc_第4页
Hibernate分页查询小结.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询:1、QBE(Qurey By Example)检索方式QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅在某些场合下有用。一个典型的使用场合就是在查询窗口中让用户输入一系列的查询条件,然后返回匹配的对象。QBE只支持=和like比较运算符,无法不大区间值,及其或的匹配。在这种情况下,还是采用HQL检索方式或QBC检索方式。Java代码1. /*2. *function根据传递过来的Object,分页显示在数据库中与其匹配的记录3. *parampageNo4. *当前页数5. *parampageSize6. *每页显示的记录数7. *paramobject8. *将查询条件封装为Object9. *return将查询结果封装为Pager返回10. */11. publicPagerfindPageByExample(intpageNo,intpageSize,Objectobject)12. 13. Pagerpager=null;14. try15. 16. Criteriacriteria=this.getSession().createCriteria(17. Class.forName(this.getEntity();18. 19. if(object!=null)20. 21. criteria.add(Example.create(object).enableLike();22. 23. 24. /获取根据条件分页查询的总行数25. introwCount=(Integer)criteria.setProjection(26. Projections.rowCount().uniqueResult();27. criteria.setProjection(null);28. 29. criteria.setFirstResult(pageNo-1)*pageSize);30. criteria.setMaxResults(pageSize);31. 32. Listresult=criteria.list();33. 34. pager=newPager(pageSize,pageNo,rowCount,result);35. 36. catch(RuntimeExceptionre)37. 38. throwre;39. finally40. 41. returnpager;42. 43. 44. 注意代码的第20行,即criteria.add(Example.create(object).enableLike();这一行,需将Example.create(object)调用.enableLike()方法,不然不能模糊查询。在BO层将需要模糊查询的列用%串起来,不然仍然和=一样。BO层代码:Java代码1. /*2. *function将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录3. *parampageNo4. *当前的页码5. *parampageSize6. *每页显示的记录数7. *parammendName8. *抢修人员的名称9. *paramspecialty10. *抢修人员的工种11. *parampost12. *抢修人员的职称13. *return将符合条件的记录数以及页码信息封装成PagerBean返回14. */15. publicPagergetInfoByQuery(intpageNo,intpageSize,StringmendName,16. Stringspecialty,Stringpost)17. 18. 19. EicMendeicMend=newEicMend();20. if(mendName!=null&mendName.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. Pagerpager=erpManagerDao34. .findPageByExample(pageNo,pageSize,eicMend);35. returnpager;36. 执行SQL语句如下:Sql代码1. Hibernate:selectcount(*)asy0_fromYJZX.EIC_MENDthis_where2. (this_.MENDNAMElike?andthis_.POSTlike?)3. 4. Hibernate:select*from(selectthis_.MENDIDasMENDID23_0_,5. this_.EXPERTREMARKasEXPERTR28_23_0_fromYJZX.EIC_MENDthis_where6. (this_.MENDNAMElike?andthis_.POSTlike?)whererownum=?所以只需将需模糊查询的列用“%”链接即可。2、QBC(Qurey By Criteria)检索方式 采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句。QBC API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Restrictions接口组成,它支持在运行时动态生成查询语句。比较常见的是两种传参方式:一种是用map传参,另一种是用Criterion不定参数传参。Map传参方式范例如下:DAO层:Java代码1. /*2. *function分页显示符合所有的记录数,将查询结果封装为Pager3. *parampageNo4. *当前页数5. *parampageSize6. *每页显示的条数7. *parammap8. *将查询条件封装为map9. *return查询结果Pager10. */11. publicPagerfindPageByCriteria(intpageNo,intpageSize,Mapmap)12. 13. Pagerpager=null;14. try15. 16. Criteriacriteria=this.getSession().createCriteria(17. Class.forName(this.getEntity();18. 19. if(map!=null)20. 21. Setkeys=map.keySet();22. for(Stringkey:keys)23. 24. criteria.add(Restrictions.like(key,map.get(key);25. 26. 27. 28. /获取根据条件分页查询的总行数29. introwCount=(Integer)criteria.setProjection(30. Projections.rowCount().uniqueResult();31. criteria.setProjection(null);32. 33. criteria.setFirstResult(pageNo-1)*pageSize);34. criteria.setMaxResults(pageSize);35. 36. Listresult=criteria.list();37. 38. pager=newPager(pageSize,pageNo,rowCount,result);39. 40. catch(RuntimeExceptionre)41. 42. throwre;43. finally44. 45. returnpager;46. 47. 48. Map传参方式对应BO层代码:Java代码1. /*2. *function将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录3. *parampageNo4. *当前的页码5. *parampageSize6. *每页显示的记录数7. *parammendName8. *抢修人员的名称9. *paramspecialty10. *抢修人员的工种11. *parampost12. *抢修人员的职称13. *return将符合条件的记录数以及页码信息封装成PagerBean返回14. */15. publicPagergetInfoByQuery2(intpageNo,intpageSize,StringmendName,16. Stringspecialty,Stringpost)17. 18. 19. Mapmap=newHashMap();20. 21. if(mendName!=null&mendName.length()0)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. Pagerpager=erpManagerDao.findPageByCriteria(pageNo,pageSize,map);35. returnpager;36. 第二种方式:Criterion不定参数传参方式。其代码如下所示:DAO层代码:Java代码1. /*2. *function分页显示符合所有的记录数,将查询结果封装为Pager3. *parampageNo4. *当前页数5. *parampageSize6. *每页显示的条数7. *paramcriterions8. *不定参数Criterion9. *return查询结果Pager10. */11. publicPagerfindPageByCriteria(intpageNo,intpageSize,12. Criterion.criterions)13. 14. Pagerpager=null;15. try16. 17. Criteriacriteria=this.getSession().createCriteria(18. Class.forName(this.getEntity();19. if(criterions!=null)20. 21. for(Criterioncriterion:criterions)22. 23. if(criterion!=null)24. 25. criteria.add(criterion);26. 27. 28. 29. 30. 31. /获取根据条件分页查询的总行数32. introwCount=(Integer)criteria.setProjection(33. Projections.rowCount().uniqueResult();34. criteria.setProjection(null);35. 36. criteria.setFirstResult(pageNo-1)*pageSize);37. criteria.setMaxResults(pageSize);38. 39. Listresult=criteria.list();40. 41. pager=newPager(pageSize,pageNo,rowCount,result);42. 43. catch(RuntimeExceptionre)44. 45. throwre;46. finally47. 48. returnpager;49. 50. 51. Criterion不定参数传参方式对应BO层代码:Java代码1. /*2. *function将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录3. *parampageNo4. *当前的页码5. *parampageSize6. *每页显示的记录数7. *parammendName8. *抢修人员的名称9. *paramspecialty10. *抢修人员的工种11. *parampost12. *抢修人员的职称13. *return将符合条件的记录数以及页码信息封装成PagerBean返回14. */15. publicPagergetInfoByQuery3(intpageNo,intpageSize,StringmendName,16. Stringspecialty,Stringpost)17. 18. Criterioncriterion1=null,criterion2=null,criterion3=null;19. if(mendName!=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()0)32. 33. criterion3=Restrictions.ilike(post,post,MatchMode.EXACT);34. 35. 36. Pagerpager=erpManagerDao.findPageByCriteria(pageNo,pageSize,37. criterion1,criterion2,criterion3);38. 39. returnpager;40. 3、HQL检索方式HQL(Hibernate Query Language)是面向对象的查询语言,它和SQL查询语言有些相识。在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。使用Query接口分页查询DAO代码:Java代码1. /*2. *function分页显示符合所有的记录数,将查询结果封装为Pager3. *parampageNo4. *当前页数5. *parampageSize6. *每页显示的条数7. *paraminstance8. *将查询条件封装为专家Bean9. *return查询结果Pager10. */11. publicListfindPageByQuery(intpageNo,intpageSize,Stringhql,12. Mapmap)13. 14. Listresult=null;15. try16. 17. Queryquery=this.getSession().createQuery(hql);18. 19. Iteratorit=map.keySet().iterator();20. while(it.hasNext()21. 22. Objectkey=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(RuntimeExceptionre)32. 33. throwre;34. 35. returnresult;36. 查询所有记录数的DAO代码:Java代码1. /*2. *function根据查询条件查询记录数的个数3. *paramhql4. *hql查询语句5. *parammap6. *用map封装查询条件7. *return数据库中满足查询条件的数据的条数8. */9. publicintgetTotalCount(Stringhql,Mapmap)10. 11. try12. 13. Queryquery=this.getSession().createQuery(hql);14. 15. Iteratorit=map.keySet().iterator();16. while(it.hasNext()17. 18. Objectkey=it.next();19. query.setParameter(key.toString(),map.get(key);20. 21. 22. Integeri=(Integer)query.list().get(0);23. returni;24. catch(RuntimeExceptionre)25. 26. throwre;27. 28. 29. BO层代码:Java代码1. /*2. *function将传递过来的参数封装成专家Bean,分页查询符合条件的记录3. *parampageNo4. *当前的页码5. *parampageSize6. *每页显示的记录数7. *paramexpertName8. *专家的名称9. *paramexpertSpecialty10. *专家的专业类别11. *parampost12. *专家的行政职位13. *return将符合条件的记录数以及页码信息封装成PagerBean返回14. */15. publicPagergetInfoByQuery(intpageNo,intpageSize,StringexpertName,16. StringexpertSpecialty,Stringpost)17. 18. StringBufferhql=newStringBuffer();19. hql.append(selectcount(expertid)fromEicExpertwhere1=1);20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论