默认情况下,参数是通过顺序绑定在查询语句上的,这使得查询方法对参数位置的重构容易出错。为了解决这个问题,可以使用 @ Param 注解指定方法参数的具体名称,通过绑定的参数名字做查询条件,这样不需要关心参数的顺序,推荐这种做法,比较利于代码重构。
案例 4.9:根据参数进行查询。
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
User findByLastnameOrFirstname(@Param("lastname") String lastname,
@Param("firstname") String firstname);
}
案例 4.10:根据参数进行查询,top 10 前面说的 query method 关键字照样有用,如下:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
User findTop10ByLastnameOrFirstname(@Param("lastname") String lastname,
@Param("firstname") String firstname);
}
提醒:大家通过 @Query 定义自己的查询方法时,建议也用 Spring Data JPA 的 name query 的命名方法,这样下来风格就比较统一了。

本文介绍了Spring Data JPA中如何利用@Param注解来避免查询方法重构时的错误。通过指定参数名称,可以按名字绑定查询条件,而不是依赖参数顺序,提高了代码的可维护性。示例展示了在UserRepository中定义的查询方法,如findByLastnameOrFirstname,这种方法也适用于findTop10ByLastnameOrFirstname等复杂查询,同时建议结合SpringDataJPA的命名查询,保持代码风格统一。

1522

被折叠的 条评论
为什么被折叠?



