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);
		}
          这样就可以实现分页的功能,离线多条件查询功能。


版权声明:本文为omayyouhappy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。