【问题标题】:CrudRepository custom method implementation?CrudRepository 自定义方法实现?
【发布时间】:2017-06-07 07:48:02
【问题描述】:

我正在阅读 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);

}

参数是否必须与列名称或方法名称相同,如“findBy”+ columnName?

【问题讨论】:

  • 是的。但更正它应该是用该数据库列名称注释的字段名称。例如,您可以将 db 列名称作为 work_email,但在 java 实体类中,映射的字段可以是电子邮件。在这种情况下,方法名称应该是 findByEmail 而不是 findByWorkEmail。

标签: java spring hibernate spring-boot


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以让您的界面像这样扩展自定义存储库界面:

    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()方法?
    • 您不会自己实现它们。 Spring 自动为您实现它们并执行查询。您需要做的就是调用该方法: User user = repo.findByName(name);注意:UserDoa repo 参考是@Autowired
    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 2016-09-11
    • 2014-05-16
    • 2011-05-30
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多