使用@Query自定义查询
- 查询可以声明在Repository方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,就更为清晰
列子
@Query("SELECT p FROM Person p where p.id = (SELECT MAX(p2.id) FROM Person p2)")
Person getMaxIdPerson();
- 传参方式
- 使用占位符 ?1 ?2
- 命名参数传递 :属性名 ,此时在方法上需要@Param(”属性名”)
- 如果@Query中又LIKE关键字,后面的参数或后面的参数加上%,这样在参数传递时可不加%
@Query("SELECT P FROM Person p where name = ?1 and email = ?2")
List<Person> testQueryAnnotationParamasl(String name, String email);
@Query("SELECT P FROM Person p where p.name = :name And p.email = :email")
List<Person> testQueryAnnotationParamasl2(@Param("email") String email, @Param("name") String name);
@Query("SELECT P FROM Person p where p.name like %?1% or p.name like %?2%")
List<Person> testQueryAnnotationParamasl3(String email, String name);
- 可指定本地查询,只要设置nativeQuery为true
@Query(value = "SELECT count(id) FROM jpa_person ", nativeQuery = true)
long testQuery();