JpaSpecificationExecutor 是 Spring Data JPA 动态查询的核心扩展,通过 Specification 机制提供灵活的类型安全查询,解决了传统 JPQL 或 Criteria API 的冗余问题,特别适合复杂业务场景下的动态数据访问需求。
核心设计目标:
动态查询:允许运行时动态构建查询条件,避免为每种查询组合编写固定方法。
类型安全:通过 Java 代码而非字符串拼接构造查询条件,减少运行时错误。
与分页/排序集成:天然支持 Spring Data 的分页和排序机制。
典型使用场景:
动态过滤:根据用户输入动态生成查询条件。
复杂条件组合:AND/OR 嵌套查询。
分页表格:后端分页查询(如管理系统表格)。
统计报表:按条件统计业务数据。
JpaSpecificationExecutor 是 Spring Data JPA 中用于支持动态复杂查询的核心接口,它通过 Specification 机制实现类型安全的动态条件组合。以下是该接口的详细解释:
1. 单实体查询
点击查看代码
Optional<T> findOne(Specification<T> spec);
2. 多实体查询
点击查看代码
List<T> findAll(@Nullable Specification<T> spec);
Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);
List<T> findAll(@Nullable Specification<T> spec, Sort sort);
3. 统计与存在性检查
点击查看代码
long count(@Nullable Specification<T> spec);
boolean exists(Specification<T> spec);
4. 删除操作
点击查看代码
long delete(@Nullable Specification<T> spec);
5. 高级查询构造
点击查看代码
<S extends T, R> R findBy(Specification<T> spec,Function<FluentQuery.FetchableFluentQuery<S>, R> queryFunction
);