spring数据库实现

时间:2017-06-16 14:09:15

标签: spring-data spring-data-jpa

我正在使用Spring DATA JPA并选择@Query注释来创建查询(而不是使用从MethodName创建的NamedQueries和查询) 我有一个数据存储库,如下所示

public interface EventRepository extends CrudRepository<Event, Long> {
    @Query("select e from Event e where e.name = :eventName)
    public List<Event>findEventByName(String eventName );
 }

根据Spring参考文档,界面看起来很好并且足够了。

但我需要一个impl类,因为除了上面我还需要很多其他方法。

当我创建实现EventRepository

的EventRepositoryImpl java时,我遇到了两个问题
  1. 要求在EventRepository中实现所有方法, findEventByName方法是自包含在接口中,为什么我需要在Impl类中再次实现它?
  2. 它要求在CrudRepository中实现所有方法,我知道它的每个OOPS设计,但有很多方法
  3. 因此,对于这些问题,我可以将EventRepositoryImpl定义为abstract, 这似乎工作得很好。

    但是当Spring使用抽象类作为bean时,我还需要担心其他任何事情。 或者有一种优雅的方式来解决这个问题。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您不必实现所有这些方法也不必创建抽象类。查看官方documentation

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
}