前面說過,JpaRepository已經(jīng)給我們提供了很強(qiáng)大的查詢功能,基本能滿足大部分場景,但是某些需求(如like查詢),仍然會遇到困難。
spring-data-jpa給我們提供了接口規(guī)范方法名查詢方式,只要在我們繼承了Repository接口的接口中使用JPA規(guī)范的方法命名,spring-data-jpa就可以反解出對應(yīng)的sql語句。
規(guī)范如下:
| 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 |
基本上所有的規(guī)范都非常好理解
首先看一個場景,我們需要查詢學(xué)生姓名中有jules的學(xué)生
編寫接口方法
按照上述規(guī)范編寫接口方法:
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就能查詢到所有我們需要的結(jié)果。
其他的方法可以自行測試,都很簡單。