扩展 CrudRepository 并仍然使用 Spring Data JPA 为自定义方法创建自己的实现

Bla*_*ell 0 java spring spring-data-jpa

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

public interface CustomerRepository extends CrudRepository<Customer, Integer> {
}
Run Code Online (Sandbox Code Playgroud)

我还能添加自定义存储库功能并实现此接口吗?

Sim*_*lli 6

是肯定的。

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

这个想法是为您的自定义代码提供一个接口,如下所示:

interface CustomizedUserRepository {
  void someCustomMethod(User user);
}
Run Code Online (Sandbox Code Playgroud)

然后你需要一个以 Impl 结尾的实现:

class CustomizedUserRepositoryImpl implements CustomizedUserRepository {

  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}
Run Code Online (Sandbox Code Playgroud)

最后是从自定义存储库扩展的 Spring Data Repo:

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

  // Declare query methods here
}
Run Code Online (Sandbox Code Playgroud)


Pap*_*usc 5

如果您JpaRepository<User, Long>使用注解扩展,您也可以直接在界面中编写您自己的查询@Query

public interface UserRepository extends JpaRepository<User,Long> {

    @Query("select u from User u where u.emailAddress = ?1")
    User findByEmailAddress(String emailAddress);
}
Run Code Online (Sandbox Code Playgroud)

Spring 文档:查询注释