Java如何限制Hibernate查询结果?

在下面的示例中,您将看到如何限制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>

Maven中央
Maven中央