在JPA中可以通过使用setFirstResult()和setMaxResults()方法实现分页查询。
setFirstResult():设置查询结果的起始索引,用于跳过前面的数据。
setMaxResults():设置查询结果的最大数量,用于限制返回的数据量。
示例:
String jpql = "SELECT u FROM User u";
Query query = em.createQuery(jpql);
query.setFirstResult(10); // 跳过前10条数据
query.setMaxResults(20); // 返回20条数据
List<User> users = query.getResultList();
上例会返回User表中的第11-30条数据。
也可以在@NamedQuery注解中设置分页参数:
@NamedQuery(
name = "findAllUsers",
query = "SELECT u FROM User u"
)
@QueryHint(name = "```x.persistence.fetchsize", value = "50")
调用时直接设置分页参数:
List<User> users = em.createNamedQuery("findAllUsers", User.class)
.setFirstResult(10)
.setMaxResults(20)
.getResultList();
另外,可以使用Query接口的setHint()方法设置数据库相关的提示参数,用于优化分页查询的性能:
String jpql = "SELECT u FROM User u";
Query query = em.createQuery(jpql);
query.setHint("```x.persistence.fetchsize", 50); //设置每页返回50条数据
query.setFirstResult(10);
query.setMaxResults(20);
List<User> users = query.getResultList();