Hibernate 分页中,查询指定页面的数据

      一般数据库实现分页,都是传一个起始数据和每页展示的数据的,想到使用mysql的limit关键字就可以查询,如下:

select * FROM ceshi
limit 1,10

     这样的确可以实现查询指定范围内的数据,要是使用hibernate的离线多条件查询的话,如果使用DetachedCriteria的sqlRestriction,添加查询条件的话,会报错,如下sql语句:

// 由于条件是组合一起的,所以有可能有些条件是为空的,需要判断是否为空,拼接不同的sql語句
		// 动态拼接sql语句查询,当条件为null,也会继续执行
		Session session = getCurrentSession();
		DetachedCriteria dc = DetachedCriteria.forClass(RetireInfor.class);

		Criteria criteria = dc.getExecutableCriteria(session);

		if (pageSize > 0) {
			// Integer[] pages = { new Integer(start), new Integer(pageSize) };
			Type[] types = { StandardBasicTypes.INTEGER,
			 StandardBasicTypes.INTEGER };
			 queryString += " limit ?,? ";
			dc.add(Restrictions.sqlRestriction("LIMIT ?,?", pages, types));//这里会在后台报错,说无法识别limit

		

		}

    上述的错误,百度了一下,说是hibernate无法识别limit,有一种方法,使用Criteria,设置开始的数据和最大数据,如下代码:
		// 由于条件是组合一起的,所以有可能有些条件是为空的,需要判断是否为空,拼接不同的sql語句
		// 动态拼接sql语句查询,当条件为null,也会继续执行
		Session session = getCurrentSession();
		DetachedCriteria dc = DetachedCriteria.forClass(RetireInfor.class);

		Criteria criteria = dc.getExecutableCriteria(session);

		if (pageSize > 0) {
			// Integer[] pages = { new Integer(start), new Integer(pageSize) };
			// Type[] types = { StandardBasicTypes.INTEGER,
			// StandardBasicTypes.INTEGER };
			// // queryString += " limit ?,? ";
			// dc.add(Restrictions.sqlRestriction("LIMIT ?,?", pages, types));

			criteria.setFirstResult(start); // 开始记录
			criteria.setMaxResults(pageSize); // 查询多少条

		}
Criteria c = dc.getExecutableCriteria(session);
		List<RetireInfor> list = null;
		try {
			list = c.list();
		} catch (Exception e) {
			LogUtil.error(e);
		}
          这样就可以实现分页的功能,离线多条件查询功能。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值