How to use Criteria Queries in Spring Boot Data Jpa Application

前端 未结 6 538
死守一世寂寞
死守一世寂寞 2020-12-04 23:10

I have an application that uses Spring Boot Data jpa . So far i am using a repository like this

public interface StudentRepository extends CrudRepos         


        
6条回答
  •  不思量自难忘°
    2020-12-04 23:34

    JPA 2 introduces a criteria API that can be used to build queries programmatically.

    You can extend a new interface from JpaSpecificationExecutor

    public interface CustomerRepository extends 
      CrudRepository, 
      JpaSpecificationExecutor {
    
      default List findCustomers() {
        return findAll(CustomerSpecs.findCustomers());
      }
    

    Then create a customer specs

    public final class CustomerSpecs {
    
        public static Specification findCustomers() {
            return new Specification() {
                public Predicate toPredicate(Root root, CriteriaQuery query,
                CriteriaBuilder builder) {
    
             LocalDate date = new LocalDate().minusYears(2);
             return builder.lessThan(root.get("birthday"), date);
          }
        };
    }
    

    The above can be simplified using lambdas as follows

    public interface CustomerRepository extends 
      CrudRepository, 
      JpaSpecificationExecutor {
    
      default List findCustomers() {
        return findAll(
          (root, query, cb) -> {
             LocalDate date = new LocalDate().minusYears(2);
             return builder.lessThan(root.get("birthday"), date);
          }
        );
      }
    

    For more details, refer this spring doc here

    https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications

提交回复
热议问题