OGNL在Mybatis中的簡單使用
阿新 • • 發佈:2018-12-04
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