最近新项目又使用了jpa。
对JPA简直又爱又恨。。。基本能满足了所有的基本查询,还基本不用写sql语句,但是。。。。弊端就不说了吧。
下面来详细看下支持的查询方式。
根据方法名字生成SQL语句(根据方法名查询)
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
我们将使用JPA criteria API 创建一个查询,但本质上这转换为以下查询:
select u from User u where u.emailAddress = ?1 and u.lastname = ?2
Spring Data JPA将执行属性检查并遍历属性表达式中描述的嵌套属性。下面是 JPA 支持的关键字的概述,以及包含该关键字的方法的本质含义。
SQL关键词想细介绍
| 关键词 | Demo | 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> age) | … 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) |
超级全,自己可以各种尝试。
本文探讨了如何在Spring JPA中利用方法名生成SQL查询,省去了手动编写SQL的步骤。介绍了JPA根据方法名进行查询的原理,并详细阐述了JPA支持的关键词,提供了一种便捷的查询方式。
2万+

被折叠的 条评论
为什么被折叠?



