0


spring jpa分页条件查询(常用三种方式)总结。

spring jpa分页条件查询(常用三种方式)

  开发中,如果是使用Spring全家桶进行开发的话,Spring Data JPA分页条件查询就会经常被用到,所以下面介绍一下jpa分页条件查询常用的三种开发方式。

一、直接传递参数方式

1. PagingAndSortingRepository

  使用PagingAndSortingRepository 的Repository接口,并在方法名上使用约定的命名规则来定义查询方法。Spring Data JPA会根据方法名自动生成查询语句,并支持分页和排序。代码如下:

publicinterfaceUserRepositoryextendsPagingAndSortingRepository<User,Long>{Page<User>findByAge(int age,Pageable pageable);}

  在Service层中可以使用

Pageable

对象来指定分页信息,然后调用Repository中定义的方法进行查询,代码如下:

Pageable pageable =PageRequest.of(pageNumber, pageSize,Sort.by("id").descending());Page<User> users = userRepository.findByAge(30, pageable);

2. @Query

@Query

注解自定义查询方法,这种方式适合需要更复杂的查询逻辑,使用 @Query 注解在Repository接口中自定义查询方法。通过编写JPQL查询语句或者使用原生SQL查询,在查询方法中,直接使用

 Pageable

对象来指定分页信息。例如:

publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{@Query("SELECT u FROM User u WHERE u.age = :age")Page<User>findByAge(@Param("age")int age,Pageable pageable);}

  在Service层中,就可以调用自定义的查询方法,并传入

Pageable

对象来实现分页查询,代码如下:

Pageable pageable =PageRequest.of(pageNumber, pageSize,Sort.by("id").descending());Page<User> users = userRepository.findByAge(30, pageable);

二、Specification

Specification

是Spring Data JPA提供的一种用于构建动态查询条件的接口,可以根据不同的条件动态组合查询条件,自定义的UserRepository 必须实现

JpaSpecificationExecutor

接口。
代码如下:

publicinterfaceUserRepositoryextendsJpaRepository<User,Long>,JpaSpecificationExecutor<User>{Page<User>findAll(Specification<User> spec,Pageable pageable);}publicclassUserService{@AutowiredprivateUserRepository userRepository;publicPage<User>findByAgeAndGender(int age,String gender,int pageNumber,int pageSize){Specification<User> spec =(root, query, criteriaBuilder)->{List<Predicate> predicates =newArrayList<>();
            predicates.add(criteriaBuilder.equal(root.get("age"), age));
            predicates.add(criteriaBuilder.equal(root.get("gender"), gender));return criteriaBuilder.and(predicates.toArray(newPredicate[0]));};Pageable pageable =PageRequest.of(pageNumber, pageSize,Sort.by("id").descending());return userRepository.findAll(spec, pageable);}}

三、 Example 和 ExampleMatcher

Example

是Spring Data JPA提供的一种用于封装查询条件的对象,可以根据实体对象的属性值进行查询。

ExampleMatcher

用于定义查询条件的匹配规则,使用它们也可以实现分页条件查询。
代码如下:

publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{Page<User>findAll(Example<User> example,Pageable pageable);}publicclassUserService{@AutowiredprivateUserRepository userRepository;publicPage<User>findByExample(String name,int age,int pageNumber,int pageSize){User user =newUser();
        user.setName(name);
        user.setAge(age);ExampleMatcher matcher =ExampleMatcher.matching().withIgnoreCase().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);Example<User> example =Example.of(user, matcher);Pageable pageable =PageRequest.of(pageNumber, pageSize,Sort.by("id").descending());return userRepository.findAll(example, pageable);}}

总结

   以上三种方式都可以实现基于Spring Data JPA的
分页查询,并根据条件进行筛选。
  希望对看到本文的你有帮助。

上一篇 SpringBoot整合SpringDataJPA实现增删改查(详细版)。
记得点赞收藏哦!!!
下一篇 springboot jpa 分页查询方式(两种)!!!

标签: spring java 服务器

本文转载自: https://blog.csdn.net/2401_82884096/article/details/136233501
版权归原作者 程序员阿皓 所有, 如有侵权,请联系我们删除。

“spring jpa分页条件查询(常用三种方式)总结。”的评论:

还没有评论