spring-data-jpa 存储库模式与 Querydsl 查询模式有啥区别?

Posted

技术标签:

【中文标题】spring-data-jpa 存储库模式与 Querydsl 查询模式有啥区别?【英文标题】:What is the difference between spring-data-jpa Repository pattern Vs Querydsl query pattern?spring-data-jpa 存储库模式与 Querydsl 查询模式有什么区别? 【发布时间】:2016-03-01 13:22:29 【问题描述】:

我正在开发Spring MVC + spring-data-jpa + Hibernate 示例。我正在使用简单的Repository (by extending JpaRepository<T, ID extends Serializable>) 模式对DataSource(DS) 执行查询并获得结果。甚至我也可以根据自己的业务需求编写任何自定义查询。

在进行研究时,我发现了"querydsl-sql" API。该API使用插件,需要使用QueryDslPredicateExecutor<T>like(by

extending JpaRepository<T, ID extends Serializable>,
QueryDslPredicateExecutor<T>)

。但在我看来,这个 API 的功能与 Repository API 的功能相同。

有人可以建议/指导两种方法有什么区别吗?一个使用简单的 Repository,另一个使用 QueryDslPredicateExecutor

List<Customer> findByCustomerNumberAndCustomerId(Integer customerNumber, Integer customerId);

查询dsl方法

    @Query("select c from Customer c where c.customerNumber=:customerNumber and c.customerId=:customerId")
    List<Customer> findByCustomerNumberAndCustomerId(@Param("customerNumber") 
Integer customerNumber, @Param("customerId") Integer customerId);

【问题讨论】:

【参考方案1】:

您的 Querydsl 方法示例实际上是一个 spring-data 存储库方法。

不同之处在于 QueryDsl 提供了一种简单而美观的方式来创建对数据库的动态查询。 IE。它允许“即时”创建 SQL。 例如,当您需要使用复杂过滤器检索实体集合时,这很有用。例如。按名称、日期、成本等。生成的 SQL 应仅包含过滤器中指定的条件。

Spring data 允许在不使用 Querydsl 的情况下使用内置的 Specifications API 来实现这一点,但 Querydsl 的方式更简单,甚至对 IDE 更友好。

更多信息: https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

【讨论】:

以上是关于spring-data-jpa 存储库模式与 Querydsl 查询模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-jpa 存储库在 Query 中使用 Collection 作为 @Param

spring-data-jpa 1.11.16 带游标的存储过程

Spring -data-jpa ,存储库类不起作用

使用 spring-data-jpa 自定义 ItemReader

为什么Spring-Data-JPA Async无法正常工作?

从控制台应用程序使用带有休眠功能的spring-data-jpa时如何延迟加载收集