品牌设计案例网站,网络营销4c策略是什么,微信分销系统ppt,合川做网站JpaSpecificationExecutor 源码和 API 我们也可以通过 idea 工具详细看其用法和实现类#xff0c;JpaSpecificationExecutor 是 Repository 要继承的接口#xff0c;而 SimpleJpaRepository 是其默认实现。而通过源码来看其提供的 API 比较简单、明了#xff0c;有如下几个方… JpaSpecificationExecutor 源码和 API 我们也可以通过 idea 工具详细看其用法和实现类JpaSpecificationExecutor 是 Repository 要继承的接口而 SimpleJpaRepository 是其默认实现。而通过源码来看其提供的 API 比较简单、明了有如下几个方法 public interface JpaSpecificationExecutorT {//根据 Specification 条件查询单个对象注意的是如果条件能查出来多个会报错T findOne(Nullable SpecificationT spec);//根据 Specification 条件查询 List 结果ListT findAll(Nullable SpecificationT spec);//根据 Specification 条件分页查询PageT findAll(Nullable SpecificationT spec, Pageable pageable);//根据 Specification 条件带排序的查询结果ListT findAll(Nullable SpecificationT spec, Sort sort);//根据 Specification 条件查询数量long count(Nullable SpecificationT spec);
}
不难看出这个接口基本是围绕着 Specification 接口来定义的。我们先来看下其源码 仔细看看图就会发现 Specifications 的接口实现类就三个。
/*** Specifications 是 Spring Data JPA 对 Specification 的聚合操作工具类里面有以下四个方法
*/
Deprecated //已经不推荐使用了我们可以用 Specification 来代替如上图。
public class SpecificationsT implements SpecificationT, Serializable {private final SpecificationT spec;//构造方法私有化只能通过 where/not 创建 Specifications 对象。private Specifications(SpecificationT spec) {this.spec spec;}//创建 where 后面的 Predicate 集合public static T SpecificationsT where(SpecificationT spec) {return new SpecificationsT(spec);}//创建 not 集合的 Predicatepublic static T SpecificationsT not(SpecificationT spec) {return new SpecificationsT(new NegatedSpecificationT(spec));}//Specification 的 and 关系集合public SpecificationsT and(SpecificationT other) {return new SpecificationsT(new ComposedSpecificationT(spec, other, AND));}//Specification 的 or 关系集合public SpecificationsT or(SpecificationT other) {return new SpecificationsT(new ComposedSpecificationT(spec, other, OR));}
......
}
而如果查看 Specifications 源码的话就会发现其已经将来要被删除了已经不推荐使用了而另外两个都是局部私有的所以真正关注的就是 Specification 接口中如下一个接口方法
public interface SpecificationT {Predicate toPredicate(RootT root, CriteriaQuery? query, CriteriaBuilder cb);
}
从这里可以看出每个调用的地方都需要创建 Specification 的实现类而 JpaSpecificationExecutor 是针对 Criteria API 进行了 predicate 标准封装帮我们封装了通过 EntityManager 的查询和使用细节使操作 Criteria 更加便利了一些。所以我们要掌握一下 Predicate、Root、CriteriaQuery、CriteriaBuilder 是什么