Hibernate DAO类概述
创始人
2024-06-07 16:01:35
0

本文向大家介绍Hibernate DAO类,可能好多人还不了解Hibernate DAO类,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

在Struts分页有两种结构:

1. 在Action中通过DAO查询出所有的记录,然后加到session或request对象中,传到客户端,由JSP进行分页。这种方法对于在数据量少的时候很方便,也不影响速度。

2.在Action中每次通过DAO只查询出一页的记录,再传给JSP页面。这种结构对于数据量大的程序很好,但对于数据量小的情况,会增加对服务器的请求,加大服务器的负载。

1).Hibernate DAO类

  1. package com.jpcf.db.dao;  
  2. import com.jpcf.db.model.*;  
  3. import com.jpcf.db.helper.HibernateUtil;  
  4. import net.sf.hibernate.*;  
  5. import java.util.*;  
  6. import com.jpcf.db.controller.*;  
  7. public class VehiclePropertyDAO {  
  8. public Collection findWithPage(int pageSize, int startRow) throws  
  9. HibernateException {  
  10. Collection vehicleList = null;  
  11. Transaction tx = null;  
  12. try {  
  13. Session session = HibernateUtil.currentSession();  
  14. tx = session.beginTransaction();  
  15. Query q = session.createQuery("from VehicleProperty vp");  
  16. q.setFirstResult(startRow);  
  17. q.setMaxResults(pageSize);  
  18. vehicleList = q.list();  
  19. tx.commit();  
  20. } catch (HibernateException he) {  
  21. if (tx != null) {  
  22. tx.rollback();  
  23. }  
  24. throw he;  
  25. } finally {  
  26. HibernateUtil.closeSession();  
  27. }  
  28. return vehicleList;  
  29. }  
  30. public int getRows(String query) throws  
  31. HibernateException {  
  32. int totalRows = 0;  
  33. Transaction tx = null;  
  34. try {  
  35. Session session = HibernateUtil.currentSession();  
  36. tx = session.beginTransaction();  
  37. totalRows = ((Integer) session.iterate(query).next()).  
  38. intValue();  
  39. tx.commit();  
  40. }  
  41. catch (HibernateException he) {  
  42. if (tx != null) {  
  43. tx.rollback();  
  44. }  
  45. throw he;  
  46. }  
  47. finally {  
  48. HibernateUtil.closeSession();  
  49. }  
  50. return totalRows;  
  51. }  

Hibernate DAO类我就贴这些分页需要的代码了。“from VehicleProperty vp”也可以用一个参数传进来,有兴趣的自己改一下吧

2).Action

下面是在Action中用到的代码:

  1. public ActionForward queryWithPage(ActionMapping actionMapping,  
  2. ActionForm actionForm  
  3. HttpServletRequest httpServletRequest,  
  4. HttpServletResponse httpServletresponse) {  
  5. Collection clInfos = null;//用于输出到页面的记录集合  
  6. int totalRows;//记录总行  
  7. VehiclePropertyDAO vehicleDAO = new VehiclePropertyDAO();  
  8. //取得当前表中的总行数  
  9. try {  
  10. totalRows = vehicleDAO.getRows("select count(*) from VehicleProperty");  
  11. } catch (Exception ex) {  
  12. servlet.log(ex.toString());  
  13. return actionMapping.findForward(Constants.FAILURE);  
  14. }  
  15. //通过PagerHelper类来获取用于输出到页面的pager对象  
  16. Pager pager=PagerHelper.getPager(httpServletRequest,totalRows);  
  17. //取出从startRow开始的pageSize行记录  
  18. try {  
  19. clInfos = vehicleDAO.findWithPage(pager.getPageSize(), pager.getStartRow());  
  20. }  
  21. catch (Exception ex) {  
  22. servlet.log(ex.toString());  
  23. return actionMapping.findForward(Constants.FAILURE);  
  24. }  
  25. //把输出的记录集和pager对象保存到request对象中  
  26. httpServletRequest.setAttribute("CLINFOS", clInfos);  
  27. httpServletRequest.setAttribute("PAGER", pager);  
  28. return actionMapping.findForward(Constants.SUCCESS);  

查询语句select count(*) from VehicleProperty 也可以换成你需要的任意的条件(select count(*) from VehicleProperty where ..)

【编辑推荐】

  1. Hibernate可行性全面概括
  2. Hibernate Sequence基础描述
  3. 浅析Hibernate使用EhCache
  4. Hibernate的一级Cache
  5. Hibernate update浅谈

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...