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

时间:2016-03-01 13:22:30

标签: spring-data-jpa querydsl jpa-2.1

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

在进行研究时,我找到了"querydsl-sql" API。此API使用插件,需要使用QueryDslPredicateExecutor<T>之类的(通过

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

。但在高级别上,我认为此API也与Repository API的功能相同。

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

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

Querydsl方法

    @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 个答案:

答案 0 :(得分:1)

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

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

Spring数据允许在没有使用内置规范API的Querydsl的情况下实现此目的,但是Querydsl方式更简单,甚至更加适合IDE。

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