1. 程式人生 > >OGNL在Mybatis中的簡單使用

OGNL在Mybatis中的簡單使用

OGNL是Object-Graph Navigation Language的縮寫,它是一種功能強大的表示式語言,通過它簡單一致的表示式語法, 可以存取物件的任意屬性,呼叫物件的方法,遍歷整個物件的結構圖,實現欄位型別轉化等功能。它使用相同的表示式去存 取物件的屬性。這樣可以更好的取得資料。

OGNL寫法
------

普通的查詢標籤
<insert><delete><update><select>

String與基本型別 可以直接寫成#{_parameter}
自定義型別Message   直接寫#{屬性名}

集合 陣列array[索引](String[])
自定義陣列[索引].屬性名(Message[])
List list
list寫法同上
Map _parameter
大小寫敏感,不能寫成大寫的

foreach標籤:
----------

<foreach collection="array" index="i" item="item" separator=",">
separator作用就是去除最後一個逗號

*集合都 可以用它來迴圈*
list和array中   i:下標(索引)    	 	item值 ----> 簡單型別---------
map中 i: keyitem.屬性名 --->物件.屬性名---兩種方式

特殊的操作符:
mod 取餘  in 判斷值是否在集合中,not in  與前面相反 返回true

if判斷語句
------

<if test="command!=null&&! "".equals(command.trim())"> and command=?</if>

<resultMap> 為select查詢結果轉換為一個javaBean物件,屬性對應查詢結果集列名
順序,迴圈,拼接
迴圈對應foreach標籤
拼接對應if,choose標籤
格式化輸出標籤,拼接後的內容不符合sql語法

where標籤:
--------

	<where>
		<if test="條件不為空"/> 
		拼接語句
	<where>
	如果條件都不滿足,不輸出
	如果多個條件都滿足的話,將最前面的and 或者or 去除

set標籤:
------

<set>代替update語句中set標籤
用where標籤用法一樣,set標籤可以去除多語句拼接的逗號

trim 功能比較多
----------

<trim> 用法和set where差不多
<trim prefix ="where" suffix="test" perfixOvrrides ="and/or" suffixOverrides="," >
	中間寫的的條件判斷語句,如果滿足的話,輸出
	prefix代表字首加where,也可以加其它的
	suffix代表字尾加test,同理
	perfixOvrrides 代表多個and或者or時,去掉第一個
	suffixOverrides代表多個逗號時,去掉最後一個
<trim>

sql標籤
-----

	可以定義也常量,要需要的位置進行引用
<sql id="columns">id,name,desc,date</sql>
可以在sql語句中使用include拼接

一對多,多對一標籤collection,associaion
------------------------------

一對多關聯
在主resultMap中加上一個<collection property="bean屬性名" resultMap="子表namespace   .  resultMap的id"/>
多對一關聯 
<association proterty="bean屬性名" resultMap="主表namespace   .  resultMap的id"/>
resultType的時候可以少寫一個resultMap,相對比較方便
但是會帶一個問題,
如果bean屬性與表列名必須相同
使用resultMap就需要配置列名,屬性名,表數值的型別,如varchar
還可以配置typeHandler,型別轉換,date,boolean轉0或者1


<choose>標籤
----------

類似java中的if-elseif 或者swich case
<when test=""></when>
<when test=""></when>
<otherwise></otherwise>這個代表java中的else
</choose>

{} 和${} 使用區別
------------

-#{}會被mybatis解析成預編譯的問號?反覆執行預編譯效果,只是引數不同,有效能上的優勢,還可以防止sql注入

${}等同於java程式碼中變數拼字串,兩邊沒有加引號的話,是sql語法的

做排序時可以使用 order by ${sage}  
一對多insert時,要取得插入表資料的id值,放入bean中
oseGeneratedKeys="true" keyProperty='id'parameterType="bean類名"


特殊的操作符:
-------

mod 取餘 
 in 判斷值是否在集合中,
 not in  與前面相反 返回true