spring jpa分页条件查询(常用三种方式)总结。
在Spring JPA中,分页条件查询可以通过以下三种常见方式实现:
- 使用Spring Data JPA提供的
Pageable
接口。 - 使用
JpaRepository
接口中的Slice
类型返回结果。 - 手动编写JPQL或者Criteria API查询。
以下是每种方式的示例代码:
- 使用
Pageable
接口:
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findByName(String name, Pageable pageable);
}
// 使用示例
Pageable pageable = PageRequest.of(page, size);
Page<User> users = userRepository.findByName("John", pageable);
- 使用
Slice
类型返回结果:
public interface UserRepository extends JpaRepository<User, Long> {
Slice<User> findByName(String name, Pageable pageable);
}
// 使用示例
Pageable pageable = PageRequest.of(page, size);
Slice<User> users = userRepository.findByName("John", pageable);
- 手动编写JPQL查询:
@Repository
public class UserRepositoryImpl implements UserRepositoryCustom {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<User> findByNameWithNativeQuery(String name, int page, int size) {
Query query = entityManager.createQuery("SELECT u FROM User u WHERE u.name = :name", User.class)
.setParameter("name", name)
.setFirstResult((page - 1) * size)
.setMaxResults(size);
return query.getResultList();
}
}
// 使用示例
List<User> users = userRepository.findByNameWithNativeQuery("John", 1, 10);
在实际应用中,可以根据需要选择合适的方式进行分页查询。Pageable
和Slice
提供了基于偏移的分页,而手动编写JPQL查询则可以提供更多的灵活性和性能优化空间。
评论已关闭