您的位置:首页 > 编程语言 > Java开发

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

2016-11-28 18:44 597 查看
      一般数据库实现分页,都是传一个起始数据和每页展示的数据的,想到使用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);
}
          这样就可以实现分页的功能,离线多条件查询功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hibernate 分页 java
相关文章推荐