我开始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);
答案 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/