【问题标题】:Extending CrudRepository and still creating own implementation for custom methods with Spring Data JPA扩展 CrudRepository 并仍然使用 Spring Data JPA 为自定义方法创建自己的实现
【发布时间】:2019-06-19 14:06:43
【问题描述】:

我有一个存储库接口,它扩展了 CrudRepository 以自动为我提供所有基本的 crud 存储库功能。

public interface CustomerRepository extends CrudRepository<Customer, Integer> {
}

我还能添加自定义存储库函数并实现这个接口吗?

【问题讨论】:

标签: java spring spring-data-jpa


【解决方案1】:

肯定是的。

官方文档中有一段: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

我们的想法是为您的自定义代码提供一个界面,如下所示:

interface CustomizedUserRepository {
  void someCustomMethod(User user);
}

那么你需要一个以 Impl 结尾的实现:

class CustomizedUserRepositoryImpl implements CustomizedUserRepository {

  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}

最后是从自定义 repo 扩展而来的 Spring Data Repo:

interface UserRepository extends CrudRepository<User, Long>, CustomizedUserRepository {

  // Declare query methods here
}

【讨论】:

  • @zapl 来自文档:“与片段接口对应的类名中最重要的部分是 Impl 后缀。”
  • 哎呀,确实,没想到这是基于名称的。评论已删除
  • @SimonMartinelli 谢谢!如果您不介意回答,最后一个问题。扩展 CrudRepository 和 just Repository 有什么区别?
【解决方案2】:

如果您使用注释@QueryJpaRepository&lt;User, Long&gt;扩展,您也可以直接在界面中编写自己的查询

public interface UserRepository extends JpaRepository<User,Long> {

    @Query("select u from User u where u.emailAddress = ?1")
    User findByEmailAddress(String emailAddress);
}

春季文档:Query annotation

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2017-06-07
    • 2017-08-15
    • 2015-10-03
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2016-09-17
    • 2015-03-15
    相关资源
    最近更新 更多