CrudRepository自定义方法实现?

时间:2017-01-22 20:01:58

标签: java spring hibernate spring-boot

我正在阅读Crudrepository,它是特定类型的存储库上的通用CRUD操作的接口。

但我们可以创建自定义界面并扩展CrudRepository。

我在网上查看了这个例子,发现他们没有在任何地方提供实施。

Sample:

@Transactional
public interface UserDao extends CrudRepository<User, Long> {

  /**
   * Return the user having the passed email or null if no user is found.
   * 
   * @param email the user email.
   */
  public User findByEmail(String email);

}

参数是否必须与列名或方法名相同,如&#34; findBy&#34; + columnName?

3 个答案:

答案 0 :(得分:6)

Spring提供了这些接口的动态实现并注入它们。您可以使用Spring定义的命名标准定义自己的方法,它将自动实现它们并执行查询。这是完整的参考文档。 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

答案 1 :(得分:3)

您可以让您的界面扩展自定义存储库界面,如下所示:

<强> UserDao.java

public interface UserDao extends CrudRepository<User, Long>, YourCustomRepository<User, String> {
}

<强> YourCustomRepository.java

public interface YourCustomRepository<T, S>{
    public User findByName(String name);
}

然后您可以使用该方法:

<强> YourControllerClass.java

@Autowired
 private UserDao repo;
                       //An example method:
@RequestMapping("/getbyName/{name}")    
public User getUserByName(@PathVariable("name") String name){
      User user = repo.findByName(name); //your custom method called here
      return user;
    }

请注意自定义方法的命名约定是&#34; findBy ....();&#34;

答案 2 :(得分:-1)

对于实现,您将基本上自动装配此存储库并使用其方法...这些方法具有内部实现,因此您可以直接使用它们

@Service
class ImplClass{

@Autowired
UserDao userDao;

public void method(){
----
userDao.findByEmail(email@abc.com);
}

}