我有来自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
时可以使用此名称吗?
答案 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
}