前面说过,JpaRepository已经给我们提供了很强大的查询功能,基本能满足大部分场景,但是某些需求(如like查询),仍然会遇到困难。
spring-data-jpa给我们提供了接口规范方法名查询方式,只要在我们继承了Repository接口的接口中使用JPA规范的方法命名,spring-data-jpa就可以反解出对应的sql语句。
规范如下:
| Keyword | Sample |
|---|---|
| IsNotNull | findByAgeNotNull |
| Like | findByNameLike |
| NotLike | findByNameNotLike |
| StartingWith | findByNameStartingWith |
| EndingWith | findByNameEndingWith |
| Containing | findByNameContaining |
| OrderBy | findByAgeOrderByName |
| Not | findByNameNot |
| In | findByAgeIn |
| NotIn | findByAgeNotIn |
| True | findByActiveTrue |
| Flase | findByActiveFalse |
| And | findByNameAndAge |
| Or | findByNameOrAge |
| Between | findBtAgeBetween |
| LessThan | findByAgeLessThan |
| GreaterThan | findByAgeGreaterThan |
| IsNull | findByAgeIsNull |
基本上所有的规范都非常好理解
首先看一个场景,我们需要查询学生姓名中有jules的学生
编写接口方法
按照上述规范编写接口方法:
List<Student> findByNameLike(String name);
然后编写我们的测试方法
@RequestMapping("findStudentByNameLike/{name}")
public List<Student> addStudent(@PathVariable("name") String name){
String selectName = "%" + name + "%";
List<Student> students = studentDao.findByNameLike(selectName);
return students;
}
编译一下我们的项目,在浏览器输入http://127.0.0.1:8080/findStudentByNameLike/jules就能查询到所有我们需要的结果。
其他的方法可以自行测试,都很简单。