在 Spring 中实施 CrudRepository。我应该遵循的最佳设计是什么?
Implementing CrudRepository in Spring. What's the best design I should follow?
我从 CrudRepository 扩展了用户存储库,如下所示
public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User>
DatatablesCriteriasRepository
有个功能需要针对不同的仓库单独实现
所以我创建了这样的存储库实现 class。在 impl
包中。
public class UserRepositoryImpl implements DatatablesCriteriasRepository<User>
请注意,这只是为了实现DatatablesCriteriasRepository
中的功能。我不想覆盖框架在 CrudRepository
中提供的默认功能。
但如果我这样做,它会更适合代码设计,因为 UserRepositoryImpl
实际上实现了 UserRepository
,顾名思义。
public class UserRepositoryImpl implements UserRepository
但这又会迫使我扩展 UserRepository 接口中的所有功能。顺便说一下如何在好的代码设计中解决这个问题?
UserRepositoryImpl
在实现 DatatablesCriteriasRepository
时可以使用这个名称吗?
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
}
我从 CrudRepository 扩展了用户存储库,如下所示
public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User>
DatatablesCriteriasRepository
有个功能需要针对不同的仓库单独实现
所以我创建了这样的存储库实现 class。在 impl
包中。
public class UserRepositoryImpl implements DatatablesCriteriasRepository<User>
请注意,这只是为了实现DatatablesCriteriasRepository
中的功能。我不想覆盖框架在 CrudRepository
中提供的默认功能。
但如果我这样做,它会更适合代码设计,因为 UserRepositoryImpl
实际上实现了 UserRepository
,顾名思义。
public class UserRepositoryImpl implements UserRepository
但这又会迫使我扩展 UserRepository 接口中的所有功能。顺便说一下如何在好的代码设计中解决这个问题?
UserRepositoryImpl
在实现 DatatablesCriteriasRepository
时可以使用这个名称吗?
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
}