/**
* 在Repository子接口中声明方法规范:
* 1. 不是随便声明的,而需要符合一定的规范
* 2. 查询方法以find | read | get开头
* 3. 涉及条件查询时,条件的属性用条件关键字连接
* 4. 要注意的是:条件属性首字母需要大写
* 5. 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性
* 若需要使用级联属性,则属性之间使用_强制进行连接
*/publicinterfacePersonRepositoryextendsRepository<Person, Integer> {/**
* 问题:查询ID值最大的Person时,使用命名查询无法实现,需要借助于@Query注解来实现
* 使用@Query注解可以自定义JPQL语句以实现更为灵活的查询
*/@Query("SELECT p FROM Person p WHERE p.id = (SELECT max(p2.id) FROM Person p2)")
Person getMaxIdPerson();
// 参数传递方式1:使用占位符的方式@Query("SELECT p FROM Person p WHERE p.name = ?1 AND p.email = ?2")
List<Person> testQueryAnnotationParams1(String name, String email);
// 参数传递方式2:使用命名参数的方式@Query("SELECT p FROM Person p WHERE p.name = :name AND p.email = :email")
List<Person> testQueryAnnotationParams2(@Param("email") String email, @Param("name") String name);
// 关于LIKE关键字:SpringData允许在占位符或命名参数上添加%%@Query("SELECT p FROM Person p WHERE p.name LIKE %?1% OR p.email LIKE %?2%")
List<Person> testQueryAnnotationLikeParams1(String name, String email);
@Query("SELECT p FROM Person p WHERE p.name LIKE %:name% AND p.email LIKE %:email%")
List<Person> testQueryAnnotationLikeParams2(@Param("email") String email, @Param("name") String name);
// 关于本地SQL查询:设置nativeQuery=true即可使用原生的SQL进行查询@Query(value="SELECT count(id) FROM SPIRINGDATA_PERSONS", nativeQuery=true)
long getTotalCount();
}