java - Spring Data JPA 的查询方法如何生成查询?

标签 java spring-boot hibernate jpa spring-data-jpa

当在 Spring Data JPA 的特定规则下创建方法时,将创建调用相应查询的方法。

例如,

public interface CustomerJpaRepository implements JpaRepository<Customer, Long>{

    public List<Customer> findByName(String name);
}

findByName() 生成类似于下面的查询。

select * from Customer where name = name;

我很好奇这个原理。准确地说,我对解析此方法并将其转换为查询的代码感到好奇。

我查看了实现JpaRepositorySimpleJpaRepository 类的代码,但找不到任何线索。 (当然也有可能我没找到)。

综上所述,当在JpaRepository中声明了一个由特定词组成的方法时,我很好奇内部实际执行这个方法的代码。更具体地说,我想查看使此方法起作用的代码。

如果内部没有代码可以做到这一点(我个人怀疑这可能...),我想知道它是如何详细实现的,如果有说明原理或内部过程的链接或 Material ,请分享相关引用资料。

最佳答案

从spring-data repository方法名创建查询的解析逻辑目前主要声明在包org.springframework.data.repository.query.parser中.

基本上,存储库方法名称字符串被解析为 PartTree ,其中包含 Parts表示定义的抽象查询条件。

然后可以使用 PartTree 创建更具体的查询对象,例如用JpaQueryCreator , 或 RedisQueryCreator ,取决于存储库的类型。

关于java - Spring Data JPA 的查询方法如何生成查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70449033/

相关文章:

java - hibernate中一对多关系映射错误

Hibernate 在运行时更改获取模式

java - 如何避免重复以下代码?

java - 如何将一段代码延迟到返回调用之后?

java - 自动隐藏 GWT 弹出面板

java - 如何在 spring 中以 react 方式提供文件/PDF 文件

java - 针对 Hibernate 映射定义的 Liquibase diffChangeLog

Java 线程等待锁定它已经锁定的对象

java - Bean 后处理器实现

spring - 预计至少有 1 个有资格作为此依赖项的 Autowiring 候选者的 bean