知识卡片

JpaRepository与JpaSpecificationExecutor的选型

专业/工作 · 621.b

内容

基于方法名派生查询的[[方法名派生查询的原理]]适合参数少、逻辑简单的固定查询,一旦查询条件是”按需组合”的(比如高级搜索里有些字段传了就过滤、没传就忽略),继续用这种方式会导致Repository接口里方法数量爆炸性增长,每种参数组合都要单独定义一个方法。JpaSpecificationExecutor提供了另一条路:把查询条件抽象成可组合的谓词(Predicate),在运行时按需拼装,不需要为每种组合预先声明接口方法。发散:这本质上是”声明式简单查询”与”命令式动态查询”之间的取舍——前者可读性好但组合爆炸,后者灵活但牺牲了方法名本身的自解释性,选择依据始终是查询条件是否是运行时动态可变的。

参考来源

《Spring Boot应用开发实战》第4章《数据库与持久化技术》