在Spring中实现CrudRepository.什么是我应该遵循的最佳设计?

Far*_*ook 8 java spring design-patterns spring-data

我有来自CrudRepository的User Repository扩展,如下所示

public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User> 
Run Code Online (Sandbox Code Playgroud)

DatatablesCriteriasRepository 具有需要针对不同存储库单独实现的功能.

所以我创建了这样的存储库实现类.在impl包中.

public class UserRepositoryImpl implements DatatablesCriteriasRepository<User> 
Run Code Online (Sandbox Code Playgroud)

请注意,这只是为了实现这些功能DatatablesCriteriasRepository.我不想覆盖CrudRepository框架中提供的默认功能.

但是,如果我做这样的事情,它将更适合代码设计,正如名称所暗示的UserRepositoryImpl实际实现UserRepository.

public class UserRepositoryImpl implements UserRepository 
Run Code Online (Sandbox Code Playgroud)

但同样这将迫使我扩展UserRepository接口中的所有函数.如何通过良好的代码设计解决这个问题?

UserRepositoryImpl它实现时可以有这个名字DatatablesCriteriasRepository吗?

Far*_*ook 15

Spring的存储库自定义实现文档提供了实现它的方法,因为@JBNizet指向了我.

文档摘录如下.

自定义存储库功能的接口

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

自定义存储库功能的实现

class UserRepositoryImpl implements UserRepositoryCustom {

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

对基本存储库界面的更改

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

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