分页查询需要两个属性:1.总记录数,2.每页的数据
了解了这两个重要的属性,那分页的思路也就了解一般了,
第一步创建分页实体对象
第二步根据hibrnate查询数据库数据
第三步返回数据个实体对象
1.
public class QueryResult { private int count; // 总记录数 private List list; // 一页的数据 public QueryResult(int count, List list) { this.count = count; this.list = list; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public List getList() { return list; } public void setList(List list) { this.list = list; } }
2.写DAO
public QueryResult findAll(int firstResult, int maxResults) { Session session = HibernateUtils.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); List<User> list = session.createQuery(// "FROM User")// .setFirstResult(firstResult)//从结果列表中的哪个索引开始取数据 .setMaxResults(maxResults)//最多取多少条数据 .list(); // 查询总记录数 Long count = (Long) session.createQuery(// "SELECT COUNT(*) FROM User")// .uniqueResult(); tx.commit(); // 返回结果 return new QueryResult(count.intValue(), list); } catch (RuntimeException e) { tx.rollback(); throw e; } finally { session.close(); } }
3.进行测试
@Test public void testFindAllIntInt() { // 查询 // QueryResult qr = userDao.findAll(0, 10); // 第1页,每页10条 // QueryResult qr = userDao.findAll(10, 10); // 第2页,每页10条 QueryResult qr = userDao.findAll(20, 10); // 第3页,每页10条 // 显示结果 System.out.println("总记录数:" + qr.getCount()); for (User user : (List<User>) qr.getList()) { System.out.println(user); } }