在下面的示例中,您将看到如何限制Hibernate查询返回的记录数。限制通常用于创建分页结果的查询结果,在该分页结果中,我们可以在应用程序数据中一页一页地导航,但是从数据库中读取的数据很少。
在Hibernate的Query对象中,我们需要通过调用setFirstResult()和setMaxResults()方法来指定第一个结果和最大结果。
package org.nhooo.example.hibernate.app; import org.hibernate.query.Query; import org.hibernate.Session; import org.nhooo.example.hibernate.model.Label; import java.util.List; public class LabelManager { public List<Label> getLabels(int pageNumber, int pageSize) { Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query<Label> query = session.createQuery("from Label", Label.class); // 设置第一个记录位置和最大记录数为 //读。setFirstResult()告诉休眠数据从哪一行开始 //应该阅读。在示例中,如果我们有10条记录的页面, // 传递页码2将从第20行读取10条记录 // 在所选记录中。 query.setFirstResult((pageNumber - 1) * pageSize); query.setMaxResults(pageSize); List<Label> labels = query.list(); session.getTransaction().commit(); return labels; } }
package org.nhooo.example.hibernate.app; import org.nhooo.example.hibernate.model.Label; import java.util.List; public class LimitDemo { public static void main(String[] args) { LabelManager manager = new LabelManager(); List<Label> labels = manager.getLabels(1, 10); for (Label label : labels) { System.out.println("Label = " + label); } } }
Maven依赖
<dependencies> <!--https://search.maven.org/remotecontent?filepath=org/hibernate/hibernate-core/5.4.1.Final/hibernate-core-5.4.1.Final.jar--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.1.Final</version> </dependency> <!--https://search.maven.org/remotecontent?filepath=org/hibernate/hibernate-ehcache/5.4.1.Final/hibernate-ehcache-5.4.1.Final.jar--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>5.4.1.Final</version> </dependency> <!--https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> </dependencies>