1. 程式人生 > >Mybatis中的OGNL使用總結=

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
版權宣告:本文為博主原創文章,轉載請附上博文連結!