https://blog.csdn.net/chengqiuming/article/details/82528961
一 点睛
Spring Data JPA支持通过定义在Repository接口的方法名来定义查询,而方法名是根据实体类的属性名来确定的。
二 常规查询
根据属性名来定义查询方法,示例如下:
-
public interface PersonRepo extends JpaRepository<Person,Long>{
-
//相对于名字相等查询,参数为name
-
List<Person> findByName(String name);
-
//通过名字like查询,参数为name
-
List<Person> findByNameLike(String name);
-
//通过名字和地址查询,参数为name和address
-
List<Person> findByNameAndAddress(String name,String address);
-
}
从代码可以看出,使用了findBy、Like,And这样的关键字,其中findBy可以用find、read、readBy、query、queryBy,get、getBy来代替。
三 限制结果数量
结果数量是用top和first关键字来实现的,示例如下:
-
public interface PersonRepo extends JpaRepository<Person,Long>{
-
//查询符合查询条件的前10条数据
-
List<Person> findFirst10ByName(String name);
-
//获得符合查询条件的前30条数据
-
List<Person> findTop30ByName(String name);
-
}
四 查询关键字列表
参考官网:Spring Data JPA - Reference Documentation
关键字 | 示例 | 功能同JPQL |
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstname,findByFirstnameIs,findByFirstnameEquals | … where x.firstname = ?1 |
Between | findByStartDateBetween | … where x.startDate between ?1 and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age <= ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended %) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended %) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in %) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection<Age> ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection<Age> ages) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) = UPPER(?1) |