当前位置: 首页 > 知识库问答 >
问题:

用自定义方法实现JpaRepository接口

申屠健
2023-03-14

我是Spring Boot的新手,所以我有几个基本问题。

当我们定义一个扩展JpaRepostory的Repostory接口时

@Repository
public interface UserInfoRepository extends JpaRepository<UserInfo, Long> {
    Optional<UserInfo> findByEmail(String email);   
    List<UserInfo> findAllByEmail(String email);
}

这些方法可以从 Service 类调用(我们可能甚至不需要提及这两个方法)。到目前为止,一切都很好。

问题:

>

  • 方法findByEmail是如何定义的?它在幕后是如何被称为的?

    如果我们想用原生SQL添加一个自定义方法< code>findUserAction呢?在这种情况下,我们需要在< code > interface UserInfoRepository 中声明它,并在< code > UserInfoRepositoryImpl 类中定义它。在这种情况下,我们不需要定义其他现有的方法吗?

    任何帮助都将不胜感激。提前感谢!:)

  • 共有1个答案

    郝池暝
    2023-03-14

    Spring Data允许您定义查询方法的方式有多种。根据您必须完成的工作量(以及您获得的灵活性)排序:

    >

  • 预定义方法。根据您选择作为存储库基础的接口,您可以免费获得一堆方法:在接口中声明的方法。你有 CrudRepositoryPagingAndSortingRepository、JpaRepository、QueryByExampleExecutor 和 JpaSpecificationExecutor 作为选择。 这些接口的方法在属于 Spring Data 的类中实现。例如在 SimpleJpaRepository 中。

    查询派生。在这里,您可以html" target="_blank">声明一个具有特定命名方案的方法。Spring Data将解析方法名,构造一个查询,绑定参数并执行它。查询是使用Jpa Criteria API创建的。

    查询注释/命名查询。您可以通过添加@Query批注、在实体上声明命名查询或将其放入属性文件中来自己提供查询。Spring Data将找到它并执行它。它还将添加漂亮的东西以添加分页,如果您选择使用这些参数,它将通过 SpEL 处理您的参数。

    最后,您可以提供自己的实现,在这里您可以做Java允许您做的事情:使用< code>EntityManager或< code>JdbcTemplate查询数据库,根本不访问数据库,而是做一些完全不同的事情。

    总的来说,整个过程是这样的:如果要注入一个存储库,Spring Data会创建一个代理,实现存储库中声明的所有方法。在代理中,Spring Data将分析方法调用,决定上述哪种情况适用并执行它。实际上,决定使用什么过程是在启动时完成的,但这不应该影响对它的理解。

    实现方法的所有这些策略都是相互独立的,因此您可以为存储库中的每个方法使用不同的策略。

  •  类似资料:
    • 为了测试它,我创建了一个新的控制器,以避免干扰我正在工作的控制器TesteController2,它运行良好。因此,我的下一步是扩展IStudentRepository中的ICustomRepository,在TesteController2中进行更改,然后Spring将不再找到我的findCustom方法,它尝试将该方法创建为JPA关键字并返回和错误。这是我的存储库接口: 和TesteContr

    • 我读到了Crudrepository,这是一个接口,用于在特定类型的存储库上进行通用CRUD操作。 但是我们可以创建我们的自定义接口并扩展CrudRepository。

    • 本文向大家介绍C#自定义签名章实现方法,包括了C#自定义签名章实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

    • 本文向大家介绍thinkPHP自定义类实现方法详解,包括了thinkPHP自定义类实现方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP自定义类实现方法。分享给大家供大家参考,具体如下: 1.通过Model调用 没有继承Model,否则会因为表不存在而报错。 调用, 调用确实方便,但是总感觉有点不合理。这个D毕竟是操作数据库的。 2.通过引入类实现,把类放到ORG下

    • 本文向大家介绍Android自定义dialog简单实现方法,包括了Android自定义dialog简单实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android自定义dialog简单实现方法。分享给大家供大家参考,具体如下: 更多关于Android开发相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》 希望本文所述对大家Android程序设计有所帮助。

    • 本文向大家介绍MFC自定义消息的实现方法,包括了MFC自定义消息的实现方法的使用技巧和注意事项,需要的朋友参考一下 一、概述: 消息机制是windows程序的典型运行机制,在MFC中有很多已经封装好了的消息,如WM_BTN**等。但是在有些特殊情况下我们需要自定义一些消息去完成一些我们所需要的功能,这时候MFC的向导不能帮助我们做到这一点。对此,我们可以通过添加相应的代码去完成这个功能。 二、实现