JPA 支援多引數列表查詢(引數可能為空)

2021-10-23 03:53:43 字數 1301 閱讀 6623

jpa 支援寫sql語句查詢

@query(value = "select * from *** ",nativequery = true)

jpa @query的sql語句可以通過?1、?2這樣獲取查詢方法裡第乙個引數、第二個引數,以此類推;或者是使用@param(「name」)標識引數,然後使用 :name 獲取。

mysql 的if函式,類似三目運算

if(***=1, 『男』 , 『女』)

結合起來可以使用mysql的if函式,來判斷引數是否為空,為空時設定1=1,也就是查所有。

第一種方式: ?1獲取引數

@query(value = "select * from test_demo where if(?1 !=』』,name=?1,1=1) and if(?2 !=』』,info=?2,1=1) ",nativequery = true)

list find(string name, string info) ;

第二種方式::name獲取引數

@query(value = "select * from test_demo where if(:name !=』』,name= :name,1=1) and if(:info !=』』,info= :info,1=1) ",nativequery = true)

list find2(@param(「name」) string name, @param(「info」) string info) ;

第三種方式:實體類獲取引數

@query(value = "select * from test_demo where if(:# !=』』,name=:#,1=1) and if(:# !=』』,info=:#,1=1) ",nativequery = true)

list find3(@param(「testdemo」)testdemo testdemo) ;

這三種寫法結果是一樣的,主要邏輯就是使用mysql的if函式,判斷某個字段是否不為空,是的話就根據這個字段查詢,否則就1=1(為了保證sql語句可以執行)。

同理可以拓展很多,包括模糊查詢等,只要mysql 支援的sql語句就可以使用jpa來實現,同時jpa特有的分頁也可以實現只需要傳遞pageable物件並使用page 接收資料即可。

@query(value = "select * from test_demo where if(?1 !=』』,name=?1,1=1) and if(?2 !=』』,info=?2,1=1) ",nativequery = true)

page find(string name, string info, pageable pageable) ;

再談引數列表

我記得上次寫了一篇文章,說用引數傳遞的方式來縮小類中的成員變數的作用範圍。實踐證明,這種做法是正確的,只是有的時候,過長的引數列表讓 看起來不舒服 不是有編碼規範嗎,規定引數列表中的引數不能超過5個 但是對於降低 的bug產出率來說,這點不舒服是必須忍受的,有什麼便宜都佔盡的道理呀 又囉嗦了 今天我...

Bash引數列表

command meaning represent all arguments the number of arguments 0the script name 1the first argument name the ten argument name basename get the file ...

可變引數列表

模擬實現printf函式 va list是在c語言中解決變參問題的一組巨集,所在標頭檔案 include 用於獲取不確定個數的引數 va start,函式名稱,讀取可變引數的過程其實就是在堆疊中,使用指標,遍歷堆疊段中的引數列表,從低位址到高位址乙個乙個地把引數內容讀出來的過程 va arg,這個巨...