CrudRepository自定义方法实现?

12

我在阅读有关Crudrepository的内容,它是一种用于特定类型存储库的通用CRUD操作的接口。

但我们可以创建自定义接口并扩展CrudRepository。

我查看了在线示例,并发现他们没有提供任何实现。

样例:

@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);

}

参数必须与列名或方法名相同,例如“findBy”+列名吗?


是的,但需要更正的是应该注释字段名称而不是数据库列名。例如,您可以将数据库列名设置为work_email,但在Java实体类中映射的字段可能是email。在这种情况下,方法名称应该是findByEmail而不是findByWorkEmail。 - prem kumar
2个回答

7

5
您可以让您的接口扩展自定义存储库接口,具体如下所示: 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;
    }

请注意,自定义方法的命名规范是“findBy....();”。

如何实现方法 YourCustomRepository.findByName()? - Dustin Sun
你不需要自己实现它们。Spring会自动为你实现并执行查询。你所需要做的就是调用方法:User user = repo.findByName(name); 注意:UserDoa repo引用是@Autowired。 - Jet_C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接