Python編程:python-attrs模塊的簡單使用
1510
2022-05-30
前言
OGNL是個什么東西?很多剛入門Java的同學會有點陌生。但是在Structs流行的時代OGNL可是必會的數據渲染技術。它全稱Object Graph Navigation Language,作用是降低對數據層訪問的難度,它擁有類型轉換、訪問對象方法、操作集合對象等功能。目前已經很少通過OGNL來訪問數據層了,寫這篇文章主要是因為目前國內大部分的ORM框架是Mybatis,而Mybatis中的動態SQL技術運用了OGNL。
Mybatis中的OGNL
不少人在Mybatis的Mapper文件中寫過這樣的判斷:
and?some_col?=?#{field}
當field不為空字符并且不為null的情況下增加一個查詢條件。其中 test就是一個OGNL表達式。Mybatis中的OGNL表達式主要有兩種用途。
條件斷言
這種是我們最常用的。執行動態SQL的條件斷言,常用的有這些表達式:
b1 or b2 ?條件 或
b1 and b2 ?條件 與
!b1 取反,也可以寫作not b1
b1 == b2,b1 eq b2 ?判斷兩個值相等
b1 != b2,b1 neq b2 判斷兩個值不想等
b1 lt b2 ?判斷b1小于(less than)b2
b1 gt b2 ?判斷b1小于(greater than)b2
b1 lte b2:判斷b1小于等于b2
b1 gte b2:判斷b1大于等于b2
b1 in b2 判斷b2包含b1
b1 not in b2 ?判斷b2不包含b1
這些表達式經常和test配合。
四則運算賦值
還有一些表達式用來賦值或者增強屬性。經常用來做模糊搜索的 bind標簽:
這里的value也屬于OGNL表達式 e1+e2,字符串是拼接,數字的話就是加法運算,我們可以引申出肯定還有:
e1*e2 乘法
e1/e2 除法
e1-e2 減法
e1%e2 取模
類的內置方法
其實Mybatis的Mapper.xml中還可以使用對象的內置方法,比如我們需要判斷一個java.util.Collection集合是否為空,可以這么寫:
and?some_col?=?#{some_val}
這里就使用了對象的內置方法Collection.size()。
我們還可以調用自定義對象CollectionUtils的靜態方法來判斷集合是否為空:
package?cn.felord.util;
public?final?class?CollectionUtils?{
public?static?boolean?isNotEmpty(?Collection>?collection)?{
return?(collection?!=?null?&&?!collection.isEmpty());
}
}
那么上面的
and?some_col?=?#{some_val}
不要忘了這里要帶上類的全限定名。
取值操作
取值操作的話,如果是對象直接e.property,如果是集合或者Map可以e[index|key],通過索引或者鍵名來取值。分別舉個例子:
#?對象取屬性
user.username
#?集合取元素
array[1]
#?map?取值
map['username']
其實靜態屬性也能取值調用,跟上面的靜態方法類似:
@cn.felord.Cache@user
對應Java代碼:
package?cn.felord;
public?final?class?Cache?{
public?static?User?user?=?new?User?("felord.cn")?;
}
賦值操作
上面的取值除了可以做判斷還可以用來SQL參數賦值:
username?=?#{username}
and?user_id?=${userId}
and?id?=?${user.id}
and?age?=?${@@abs(-12345678)}
and?gender?=${@cn.felord.GenderEnum@MALE.ordinal()}
and?id=${@cn.felord.Cache@user.userId}
通過${}符號可以用OGNL表達式給SQL參數賦值,不過感覺平常比較少用。還有一些OGNL的 玩法可以去看官方文檔。
總結
今天對Mybatis中的OGNL表達式進行了總結和分組,對常用的和不常用的用法進行了歸納,希望能夠幫助你掌握Mybatis動態SQL的深度運用。不過請盡量將復雜的操作簡單化,不要寫過于復雜的OGNL表達式,無論是從性能上還是并發安全上都是很重要的因素。好了今天的分享就到這里,請多多關注:碼農小胖哥,獲取日常開發中有用的干貨知識。如果你對OGNL的用法有自己的心得體會,歡迎留言討論。
厲害了!Spring Boot 2.5正式發布
2021-05-21
Spring Security5.5發布,正式實裝OAuth2.0的第五種授權模式
2021-05-19
MyBatis SQL
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。