教你快速學會JPA中所有findBy語法規則
快速學會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);
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- JPA如何使用findBy方法自定義查詢
- Spring Boot JPA Repository之existsBy查詢方法失效的解決
- 基於JPA的Repository使用詳解
- SpringBoot使用JPA實現查詢部分字段
- jpa介紹以及在spring boot中使用詳解