Mybatis開發遇到問題彙總

1.mybatis 中![CDATA[...]]

在今天使用Mybatis的xml文件中寫sql語句時寫入了一些特殊字符 如 < > & 等,但解析xml文件的時候會被轉義,事實上並不但願它被轉義,可使用<![CDATA[ ]]>. 這是XML語法,在CDATA內部的全部內容都會被解析器忽略. 可是所以會致使<if test=""></if> <where></where> <choose></choose> <trim></trim>等標籤自己功能失效,因此使用時把帶有特殊字符的語句或字符自己放在<![CDATA[ ]]>內便可,即儘可能精確其做用範圍.
也就是當你在使用有<if test=""></if> <where></where> <choose></choose> <trim></trim>的標籤中使用 < > & 等特殊字符的時候,會出現xml語法錯誤,須要使用<![CDATA[ ]]>將 < > & 等特殊字符被解析器忽略,正確書寫:sql

<select id="findChannelAlarmPage" resultType="DVBSChannelAlarmModel">
		select * from dvbs_channel_alarm_tab where 1=1
		<if test="queryMap.end_date != null">
			<![CDATA[
			and	check_time <= #{queryMap.end_date}
			]]>			
		</if>
</select>

2.bind 標籤

bind 標籤可使用 OGNL 表達式建立一個變量井將其綁定到上下文中。在前面的例子中, 
UserMapper.xml 有一個 selectByUser 方法,這個方法用到了 like 查詢條件,部分代碼以下 。數據庫

<if test=」 userNarne != null and userNarne ! = 」」>
and user name like concat ( ’ 毛 ’, #{ userNarne },’ 氈 ’ )
</if>

使用 con cat 函數鏈接字符串,在 MySQL 中,這個函數支持多個參數,但在 Oracle 中只 
支持兩個參數。因爲不 同數據庫之間的語法差別 ,若是更換數據庫,有些 SQL 語句可能就須要 
重寫。針對這種狀況,可 以使用 bind 標籤來避免因爲更換數據庫帶來的一些麻煩。將上面的 
方法改成 bind 方式後,代碼以下。mybatis

<if test=」 userNarne != null and userNarne !=」」>
<bind narne= " userNarneLike 」 value = 」’ 草 ’+ userNarne + ’ 每 ’」 / 〉
and user name like #{userNarneLike}
</if>

bind 標籤的兩個屬性都是必選項, name 爲綁定到上下文的變量名, value 爲 OGNL 表 
達式。建立一個 bind 標籤的變量後 , 就能夠在下面直接使用,使用 bind 拼接字符串不只可 
以免因更換數據庫而修改 SQL,也能預防 SQL 注入。app

3.mybatis的存儲過程

4.mybatis鑑別器

一、概述:函數

鑑別器在於肯定使用那個ResultMap來映射SQL查詢語句,在實現中咱們每每有一個基類,而後能夠派生一些類。好比咱們要選擇一羣人能夠用List<Person>,然而Person裏面有個性別sex,根據它還能夠分爲Male或者Female。鑑別器就要根據sex決定用Male仍是用Female相關的Mapper進行映射。spa

這些話仍是很抽象,不過提及鑑別器,語言真的很差用描述,不過沒關係,咱們來看一個實例就豁然開朗了,咱們知道在上篇中咱們已經有了一個員工的POJO,而後繼承這個POJO分紅一個男性,一個女性的POJO。.net

二、實例:code

當咱們查詢一批員工的時候,咱們但願的是返回一個List<Employee>,而裏面的元素根據性別(sex)自動匹配是MaleEmployee或者是FemaleEmployee,因而咱們須要根據sex的值去決定使用MaleEmployee或者是FemaleEmployee的resultMap去映射,這即是鑑別器。
--------------------- 
原文:https://blog.csdn.net/ykzhen2015/article/details/51249963 xml

5.mybatis的批量更新和批量插入

mybatis三種批量插入方式對比:blog

https://blog.csdn.net/m0_37981235/article/details/79131493

Mybatis中進行批量更新(updateBatch):

https://blog.csdn.net/xyjawq1/article/details/74129316

https://blog.csdn.net/xu1916659422/article/details/77971696

相關文章
相關標籤/搜索