【问题标题】:Spring Data JPA 的查询方法如何生成查询?
【发布时间】:2022-01-23 16:14:36
【问题描述】:

当在 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中声明一个由特定词组成的方法时,我很好奇内部实际执行这个方法的代码。更具体地说,我想看看使这个方法有效的代码。

如果内部没有代码可以做到这一点(个人怀疑是不是可以...分享相关参考资料。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!我会检查你的 cmets 中的链接 :)
    【解决方案2】:

    我建议您查看此Query Creation spring 文档 它解释了方法如何转换为查询的规则。

    【讨论】:

    • 谢谢。其实我已经看过这篇文章了,我要找的是使查询方法起作用的代码。
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 2020-01-23
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多