前面说过,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就能查询到所有我们需要的结果。
其他的方法可以自行测试,都很简单。
网友评论