Spring Boot JPA 命名規則

2021-09-19 11:10:58 字數 2653 閱讀 3581

一、常用規則速查

1   and    並且

2   or      或

3   is,equals    等於

4   between      兩者之間

5   lessthan      小於

6   lessthanequal     小於等於

7   greaterthan     大於

8   greaterthanequal   大於等於

9   after    之後(時間) >

10  before    之前(時間) <

11  isnull        等於null

12  isnotnull,notnull   不等於null

13  like    模糊查詢。查詢件中需要自己加 %

14  notlike     不在模糊範圍內。查詢件中需要自己加 %

15  startingwith  以某開頭

16  endingwith    以某結束

17  containing   包含某

18  orderby  排序

19  not    不等於

20  in     某範圍內

21  notin    某範圍外

22  true    真

23  false    假

24  ignorecase  忽略大小寫

二、spring data 解析方法名--規則說明1、規則描述

按照spring data 定義的規則,查詢方法以find|read|get開頭(比如 find、findby、read、readby、get、getby),涉及條件查詢時,條件的屬性用條件關鍵字連線,要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多餘的字首擷取掉,然後對剩下部分進行解析。

如果方法的最後乙個引數是 sort 或者 pageable 型別,也會提取相關的資訊,以便按規則進行排序或者分頁查詢。

2、舉例說明

比如 findbyuseraddresszip()。框架在解析該方法時,首先剔除 findby,然後對剩下的屬性進行解析,詳細規則如下(此處假設該方法針對的域物件為 accountinfo 型別):

先判斷 useraddresszip (根據 pojo 規範,首字母變為小寫,下同)是否為 accountinfo 的乙個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,繼續第二步;

從右往左擷取第乙個大寫字母開頭的字串(此處為 zip),然後檢查剩下的字串是否為 accountinfo 的乙個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,則重複第二步,繼續從右往左擷取;最後假設 user 為 accountinfo 的乙個屬性;

接著處理剩下部分( addresszip ),先判斷 user 所對應的型別是否有 addresszip 屬性,如果有,則表示該方法最終是根據 "accountinfo.user.addresszip" 的取值進行查詢;否則繼續按照步驟 2 的規則從右往左擷取,最終表示根據 "accountinfo.user.address.zip" 的值進行查詢。

可能會存在一種特殊情況,比如 accountinfo 包含乙個 user 的屬性,也有乙個 useraddress 屬性,此時會存在混淆。讀者可以明確在屬性之間加上 "_" 以顯式表達意圖,比如 "findbyuser_addresszip()" 或者 "findbyuseraddress_zip()"。(強烈建議:無論是否存在混淆,都要在不同類層級之間加上"_" ,增加**可讀性)

三、一些情況

1、當查詢條件為null時。

舉例說明如下:

實體定義:對於乙個客戶實體cus,包含有name和***,均是string型別。

查詢方法定義:listfindbynameand***(string name,string ***);

使用時:dao.findbynameand***(null, "男");

後台生成sql片斷:where (cus0_.name is null) and cus0_.***=?

結論:當查詢時傳值是null時,資料庫中只有該字段是null的記錄才符合條件,並不是說忽略這個條件。也就是說,這種查詢方式,只適合於明確查詢條件必須傳的業務,對於動態查詢(條件多少是動態的,例如一般的查詢列表,由終端使用者使用時決定輸入那些查詢條件),這種簡單查詢是不能滿足要求的。

2、排序?

listfindby***orderbyname(string ***);//名稱正序(正序時,推薦此方式,簡單)

listfindby***orderbynameasc(string ***);//名稱正序(效果同上)

listfindby***orderbynamedesc(string ***);//名稱倒序

SpringBoot JPA常用註解

就像 table註解用來標識實體類與資料表的對應關係類似,column註解來標識實體類中屬性與資料表中字段的對應關係。column name broker id columndefinition bigint 11 nullable false private long brokerid id co...

Spring Boot JPA訪問Mysql示例

上篇演示了通過m en構建spring boot 專案,引用web模組啟動應用,完成簡單的web 應用訪問,本章內容在此基礎上面加入資料訪問與埠修改,下文 與演例 本用例純手工測試通過,放心入坑 修改預設埠 在src main resources下加入application.properties內容...

spring boot jpa 事務管理

spring boot 對jpa的支援極為方便,基本上不需要作太多配置,只需要加上註解就能支援事務 controller transactional rollbackon exception.class public class testcontroller transactional rollba...