Criteria Query
实体定义:
1 | @Entity |
1 | @Entity |
1 | @Entity |
元模型(Metamodel)
Criteria Query 完成 multi select 查询
现在要查询所有 Advisor 对象,并且查出 Advisor 对象中 managers 集合的个数和 products 集合中 rate 属性的最大值:
定义一个 DTO 对象,保存查询结果
1 | public class AdvisorDto implements Serializable { |
定义查询接口和实现类
1 | public interface AdvisorDtoRepository { |
1 | public class AdvisorDtoRepositoryImpl implements AdvisorDtoRepository { |
Specification 查询:
1 | public class AdvisorSpecs { |
Spring Data Jpa 查询:
1 | @GetMapping("/advisors") |
Querydsl
Querydsl 是一个类型安全的 Java 查询框架,支持 JPA, JDO, JDBC, Lucene, Hibernate Search 等标准。类型安全(Type safety)和一致性(Consistency)是它设计的两大准则。在 Spring Boot 中可以很好的弥补 JPA 的不灵活,实现更强大的逻辑。
Criteria Query 也是类型安全的,但它要求 CriteriaQuery
, CriteriaBuilder
和 Root
对象,而 Querydsl 只需要一个生成的元数据模型(以大写字母 Q 开头加上 java 实体类型名称的类)。
而且 BooleanExpression
不和查询实例耦合,当和 JPA 联合使用时,我们可以在不同的表达式中使用它。
配置
build.gradle
1 | dependencies { |
QueryDslPredicateExecutor 接口
Spring 参数支持解析 com.querydsl.core.types.Predicate,根据用户请求的参数自动生成 Predicate,这样搜索方法不用自己写啦,比如:
1 | @GetMapping(value = {"", "/", "home", "/index", "/index.html"}) |
然后请求:
1 | http://localhost:8008/blog?id=2&title=xx // 列表页面仅显示id大于2且标题忽略大小写匹配xx字符串的博客 |
类 SQL 查询
配置 JPAQueryFactory:
1 | import com.querydsl.jpa.HQLTemplates; |
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理