動態SQL支援

2021-08-21 09:34:45 字數 2759 閱讀 8125

if

choose (when, otherwise)

trim (where, set)

foreach

if

動態 sql 通常要做的事情是根據條件包含 where 子句的一部分。比如:

select * from blog where state = 『active』

test屬性中是乙個ognl邏輯表示式,如果返回結果為true則執行標籤體,否則不執行標籤體

and title like #  引數中的title屬性如果不為空,則 select * from blog where state = 『active』 and and title like #

test屬性中的ognl表示式可以是多個邏輯判斷組成的,例如

"author != nullandauthor.name != null">

andauthor_name like #

insertselective定義中有很多的if判斷,根據對應的屬性生成不同的sql語句

動態插入獲取的優勢是default設定生效

updatebyprimarykeyselective同樣處理

choose, when, otherwise可以實現開關分支判斷

select * from blog where state = 『active』

這個標籤體中只要乙個條件判斷成立,則立即退出標籤.可以使用這個標籤模擬出if/else結構

and title like#

如果上面的判讀成立,執行標籤體後立即退出choose結構;只有不成立時才會判斷這個條件

and author_name like#

and featured = 1當多有的when不成立時執行這個標籤體

注意:其中的語法格式為元素型別為 "choose" 的內容必須匹配 "(when*,otherwise?)"           

where用於生成對應的where關鍵字

select * fromt_users where 1=1

username!=null">                              

and username=#                           

and password=#

and birth=#

標籤體中沒有生成任何查詢條件,則不會生成where關鍵字;如果生成了sql語句,同時sql語句以and/or開頭,則自動剔除多餘的and/or關鍵字      

select * fromt_users

and username=#

and password=#

and birth=#

set和where類似,用於生成update語句中的set關鍵字,如果標籤體為空,則不會生成set關鍵;如果標籤體不為空,則會自動剔除所生成sql語句末尾的多餘的逗號

update t_users

username= #,

password= #,

where id =#

trim和where/set類似

suffix=",,,,自動新增的字尾" suffixoverrides=",自動去除的字尾">

1. 替代

andusername=#

andpassword=#

2. 替代

username= #,

password= #,

foreach

對乙個集合進行遍歷,通常是在構建 in 條件語句的時候

and id in

index="kk序號,從0開始" item="pp迴圈控制變數,每次迭代訪問乙個元素,就會臨時賦值給它" open="(生成內容的開頭,只新增一次"

close=")生成內容的結束,只新增一次" separator=",每個元素之間的分隔符,末尾處不會新增">

$你可以將任何可迭代物件(如 list、set 等)、map 物件或者陣列物件傳遞給 foreach 作為集合引數。當使用可迭代物件或者陣列時,index 是當前迭代的 次數,item 的值是本次迭代獲取的元素。當使用 map 物件(或者 map.entry 物件的集合)時,index 是鍵item 是值

bind

bind 元素可以從 ognl 表示式中建立乙個變數並將其繫結到上下文。比如:              

select * from blog  where titlelike #

sql

這個元素可以被用來定義可重用的 sql **段,可以包含在其他語句中。它可以被靜態地(在載入引數) 引數化. 不同的屬性值通過包含的例項變化

$.id,$.username,$.password

如果那個sql需要使用 $.id,$.username,$.password內容,可以直接通過

引用上面塊中定義的內容

用於給sql塊中的$進行賦值

,進行引用,並支援給$變數進行賦值

id,username, password, birth, ***, salary

如果使用select *執行查詢,效率很低,執行查詢之前需要訪問資料字典獲取所有的列名。在開發中不建議;

select from t_users

動態資料支援

asp.net3.5extensions ctp包含了乙個新特性是asp.net dynamic support 動態資料支援 它允許開發人員不用編寫一行 就能極其快捷地建造使用linq to sql物件模型的資料驅動 動態資料支援的步驟。1.建立asp.net dynamic data 站點,如圖...

動態資料支援

asp.net 3.5 extensions ctp包含了乙個新特性是asp.net dynamic data support 動態資料支援 它允許開發人員不用編寫 就能及其快速地建造使用linq to sql物件模型的資料驅動 建立完成後,專案結構如下 在解決方案中會有乙個 dynamic dat...

nginx支援動態模組

之前一直以為nginx只支援靜態模組,每次新增新模組的時候只能重新編譯,最近在看nginx的原始碼,發現新版nginx已經支援進行動態載入模組。通過模組動態載入指令load module,我們可以在執行中修改nginx的配置,指定要載入的第三方模組,然後reload,是不是方便了很多。core模組已...