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

标签 java spring design-patterns spring-data

我从 CrudRepository 扩展了用户存储库,如下所示

public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User> 

DatatablesCriteriasRepository 有一个函数需要针对不同的存储库单独实现。

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

public class UserRepositoryImpl implements DatatablesCriteriasRepository<User> 

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

但如果我这样做,它会更适合代码设计,因为 UserRepositoryImpl 实际上实现了 UserRepository,顾名思义。

public class UserRepositoryImpl implements UserRepository 

但这又会迫使我扩展 UserRepository 接口(interface)中的所有功能。顺便说一下如何在好的代码设计中解决这个问题?

UserRepositoryImpl 在实现 DatatablesCriteriasRepository 时可以使用这个名称吗?

最佳答案

Spring's repositories custom implementations正如@JBNizet 向我指出的那样,文档提供了实现它的方法。

文档摘录如下。

自定义存储库功能的接口(interface)

interface UserRepositoryCustom {
  public void someCustomMethod(User user);
}

自定义存储库功能的实现

class UserRepositoryImpl implements UserRepositoryCustom {

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

对基本存储库界面的更改

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

  // Declare query methods here
}

关于java - 在 Spring 中实现 CrudRepository。我应该遵循的最佳设计是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29467886/

相关文章:

java - 根据主机名加载 Bean

Spring自定义AuthenticationFailureHandler

java - 重构包含过多 switch case 的代码

java - 如何实现可配置的单例?

c# - 如何为一个列表中的不同类型的值设计工厂模式?

java - 如何防止值强烈引用其键?

java - 通过代理使用 JDBC 驱动程序连接到 MySQL

spring - 仅在第一次调用时调查 HTTP 406 错误代码

java - 如何使用 Java 在 xml 中打印所选父标签内的子标签属性

java - 无法在 Debug模式下启动服务器: hybrisserver. bat