💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过`JpaSpecificationExecutor`接口进行动态查询。相比JPQL,其优势是类型安全,更加的面向对象。 <br/> **1. `JpaSpecificationExecutor`接口的所有方法如下** ```java public interface JpaSpecificationExecutor<T> { Optional<T> findOne(@Nullable Specification<T> var1); List<T> findAll(@Nullable Specification<T> var1); Page<T> findAll(@Nullable Specification<T> var1, Pageable var2); List<T> findAll(@Nullable Specification<T> var1, Sort var2); long count(@Nullable Specification<T> var1); } ``` **2. `Specification`接口通过它的`toPredicate`方法来构造查询条件** ```java public interface Specification<T> extends Serializable { ... /** * Root:代表查询的根对象,可以通过root获取实体中的属性 * CriteriaQuery:代表一个顶层查询对象,用来自定义查询,如 where、groupBy等 * CriteriaBuilder:用来构建查询,此对象里有很多条件方法,如 and、or、equal等 */ @Nullable Predicate toPredicate(Root<T> var1, CriteriaQuery<?> var2, CriteriaBuilder var3); } ```