Mybatis中的OGNL使用總結=
部落格01----Mybatis中的OGNL使用總結===================
2016年09月07日 23:47:41 dijkstral 閱讀數:7362
經常在寫mapper中用到一些OGNL,但是沒怎麼總結,使用方法一直模模糊糊的。抽點時間,查了別
人的blog,做個簡單的總結;
1.概念;
OGNL,Object Graph Navigation Language,是一種強大的表示式語言,網上搜索這個概念,多是和
structs有關的。但是在mybatis中OGNL應用很廣的;
2.基本引數:
Mybatis中常用的OGNL表示式有以下:
e1 or e2
e1 and e2
e1 == e2,e1 eq e2
e1 != e2,e1 neq e2
e1 lt e2:小於
e1 lte e2:小於等於,其他gt(大於),gte(大於等於)
e1 in e2
e1 not in e2
e1 + e2,e1 * e2,e1/e2,e1 - e2,e1%e2
!e,not e:非,求反
e.method(args)呼叫物件方法
e.property物件屬性值
e1[ e2 ]按索引取值,List,陣列和Map
@ [email protected](args)呼叫類的靜態方法
@[email protected]呼叫類的靜態欄位值
更加詳細的介紹可以參考官網的介紹:https://commons.apache.org/proper/commons-
ognl/language-guide.html
在一定意義上說,mybatis中的動態sql也是基於OGNL表示式的。其中常用的元素有如下幾種:
if
choose(when,otherwise)
trim
where
set
foreach
3.應用;
OGNL在mybatis中的應用,主要有兩種;
1)動態SQL表示式;
舉個栗子:
<<span
class=“hljs-title”>select id=<span
class=“hljs-value”>“demo1” …>
<code class="language-xml hljs has-
numbering"> select id, name from users
<bind <span class="hljs-
attribute">name=“nameLike” <span class="hljs-
attribute">value="’%’ + name + ‘%’"
<where>
<if <span class="hljs-
attribute">test="name != null and name !=
‘’">
name like ‘${nameLike}’
</if>
</where>
</select>
其中的bind中的value值會使用OGNL計算,ps,其中bind的引數呼叫只能用$獲取;
;
2)
${param}引數中;
<<span
class=“hljs-title”>select id=<span
class=“hljs-value”>“demo2” …>
select id,name from users
<<span class="hljs-
title">where>
<<span class="hljs-
title">if test=<span class="hljs-
value">“name != null and name != ‘’”>
name like ‘${’%’ + name
- ‘%’}’
</if>
</where>
<span
class=“hljs-tag”></select>
此處寫的是${’%’
- name + ‘%’},而不是%${name}%,這兩種方式的結果一樣,但是處理過程不一樣。
ps,說明一下#
和 {} 為原樣輸出,你傳什麼,sql裡就填入什麼,比如有引號它也會原樣填到sql裡。#
{} 會使用 PreparedStatement,變數處用 ? 代替。
在能使用 #{} 儘量使用它吧,可以防止sql注
入。
以下是一個OGNL的呼叫靜態方法的示例:
作者:dijkstral
來源:CSDN
原文:https://blog.csdn.net/l153097889/article/details/52464548
版權宣告:本文為博主原創文章,轉載請附上博文連結!