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

时间:2015-04-06 08:34:27

标签: java spring design-patterns spring-data

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

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接口中的所有函数。如何通过良好的代码设计解决这个问题?

UserRepositoryImpl实现DatatablesCriteriasRepository时可以使用此名称吗?

1 个答案:

答案 0 :(得分:13)

Spring's repositories custom implementations文档提供了实现此方法的方法,因为@JBNizet指向了我。

文档摘录如下。

自定义存储库功能的界面

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
}