教你快速学会JPA中所有findBy语法规则
目录
- 快速学会JPA中所有findBy语法规则
- 1、findBy findAllBy的区别
- 2、JPA中支持的关键词
- JPA findBy 语法总结
- 1、JPA同时查询两个属性
- 2、表格汇总
- 3、Spring Data JPA框架在进行方法名解析时
- 4、JPA的NamedQueries
- 5、JPQL查询
快速学会JPA中所有findBy语法规则
1、findBy findAllBy的区别
它们之间没有区别,它们将执行完全相同的查询,当从方法名称派生查询时,Spring Data会忽略All部分。唯一重要的一点是By关键字,其后面的任何内容都被视为字段名称
如 findXXXXXXXXXXXXXByName 实际上==》 findByName
2、JPA中支持的关键词
And
:等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);
Or
:等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
Between
:等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
LessThan
:等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
GreaterThan
:等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
IsNull
:等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
IsNotNull
:等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
NotNull
:与 IsNotNull 等价;
Like
:等价于 SQL 中的 "like",比如 findByUsernameLike(String user);但是有一点需要注意的是,%需要我们自己来写
NotLike
:等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
OrderBy
:等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
Not
:等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
In
:等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
NotIn
:等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
JPA findBy 语法总结
1、JPA同时查询两个属性
其中一个是embedded class的属性
findByIdageAndTime(int age, Date time)
2、表格汇总
3、Spring Data JPA框架在进行方法名解析时
会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。
4、JPA的NamedQueries
在实体类上使用@NamedQuery,示例如下:
@NamedQuery(name = "UserModel.findByAge",query = "select o from UserModel o where o.age >= ?1")
在自己实现的DAO的Repository接口里面定义一个同名的方法,示例如下:
public List findByAge(int age);
然后就可以使用了,Spring会先找是否有同名的NamedQuery,如果有,那么就不会按照接口定义的方法来解析。
5、JPQL查询
@Query("from SysUser u where u.nickname=:nickname") SysUser findUser(@Param("nickname") String nickname); @Query("from SysUser u where u.nickname like %:nickname% order by u.fans desc") List<SysUser> findUsers(@Param("nickname") String nickname);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。