我有从CrudRepository扩展的User Repository,如下所示
public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User>
DatatablesCriteriasRepository 具有需要针对不同存储库分别实现的功能。
DatatablesCriteriasRepository
因此,我创建了这样的存储库实现类。在impl包装中。
impl
public class UserRepositoryImpl implements DatatablesCriteriasRepository<User>
请注意,这仅用于实现功能DatatablesCriteriasRepository。我不想覆盖CrudRepository该框架中提供的默认功能。
CrudRepository
但如果我这样做,它会更适合在代码设计,UserRepositoryImpl真正实现UserRepository顾名思义。
UserRepositoryImpl
UserRepository
public class UserRepositoryImpl implements UserRepository
但这又将迫使我扩展UserRepository接口中的所有功能。如何通过良好的代码设计解决此问题?
实现时可以使用UserRepositoryImpl这个名称DatatablesCriteriasRepository吗?
Spring的存储库定制实现文档提供了@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 }