关于用HibernateTemplate实现分页(错误的,没有价值)

最近在整合ssh的时候刚好做到分页。自己在dao层一直是使用HibernateTemplate,但是在分页的时候需要设置offset和pagesize这两个参数。但是就hibernatetemplate中并没有能设置offset的方法(本人菜鸟初学)。

所有的刚开始的方法是int totalPages = ((Long) this.hibernateTemplate.getSessionFactory().openSession().createQuery(totalCountHql).uniqueResult()).intValue()得到总共的记录数,用List<Orgnization> date = (List<Orgnization>)this.hibernateTemplate.getSessionFactory().openSession().createQuery(totalHql).setFirstResult(offset).setMaxResults(pagesize).list();得到集合。然后再进行展现。

在调试的过程中程序正常运行三次后就不再一直在加载的页面不在运行。在论坛上发了帖子,又百度又谷歌都没有得到答案,有个答案说的很有道理但是我由于初学看的不是很懂。

后来也想尝试用HibernateDaoSupport来实现分页,我的第一反应是能不能同时使用着两种方法来管理dao层,但是Google后发现在注入的时候两个的class就是不一样的,让我马上打消了这个念头。

再仔细的看代码在想是不是能优化,发现原来是我在上述方法中一直在打开session却没有关闭。后来想到是不是能关闭session来解决问题,由于session一直在用在就在分页的封装中事先定义Session session =this.hibernateTemplate.getSessionFactory().openSession();在每次使用完session的时候及时关闭,经过调试程序能正常运行,也不会出现之前的情况了。

//事先要将hibernatetemplate注入

public PagerModel listOrgnization(int parentId, int offset, int pagesize) {
		
		Session session =  this.hibernateTemplate.getSessionFactory().openSession();
		
		String totalCountHql = "select count(*) from Orgnization o where o.parent is null";
		
		if(parentId != 0) {
			totalCountHql = "select count(*) from Orgnization o where o.parent.id =" + parentId;
		}
		
		int totalPages = ((Long) session.createQuery(totalCountHql).uniqueResult()).intValue();
		
		String totalHql = "from Orgnization o where o.parent.id is null";
		
		if(parentId != 0) {
			totalHql = "from Orgnization o where o.parent.id =" + parentId;
		}
		//使用hql的时候不能使用类的方法
		
		List<Orgnization> date = (List<Orgnization>)session.createQuery(totalHql)
							.setFirstResult(offset).setMaxResults(pagesize).list();
		
		session.close();
		
		PagerModel pm = new PagerModel();
		pm.setDate(date);
		pm.setTotalPage(totalPages);
		
		return pm;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值