(八)Mybatis當中#{}常用屬性的用法

生活加油發表於2020-11-11

這篇文章主要講述Mybatis當中#{}常用屬性的用法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

#{}佔位符的屬性

這是他的一些屬性,當然本篇文章重點講解在開發當中我們會用到的一些屬性。

javaType、 jdbcType、 mode(儲存過程)、 numericScale、
resultMap、 typeHandler、 jdbcTypeName、 expression(未來準備支援的功能);

用法#{age ,jdbcType=TINYINT ,javaType=short}

javaType

通常可以從引數物件中來去確定,這個屬性一般很少使用。
如果用的eclipse可以全域性搜ctrl+shift+t 搜尋JdbcType
這個就是xml當中傳值型別對映關係,也就是java當中的型別和jdbc的屬性關係。

jdbcType

如果用的orcle資料庫假如資料傳值為Null的時候就會報錯,這個時候可以通過設定這個來進行避免報錯。
程式碼示例:
這是一個新增返回主鍵的Orcle示例

<insert id="addEmp" databaseId="oracle">
	<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
		select EMPLOYEES_SEQ.nextval from dual 
	</selectKey>
	insert into employees(ID,LAST_NAME,EMAIL) 
	values(#{id},#{lastName},#{email}) 
</insert>

假如last或者email傳值為null就會報錯,報無效的列型別
在這裡插入圖片描述
原因:
當傳值為Null的時候,mybatis會自動對應jdbcType類當中的other型別,而oracle並不認識這個型別,mysql他不會報錯的。
解決方案:
當指定型別之後,他就不會去預設other型別了,這樣就可以解決傳null值報錯問題

insert into employees(ID,LAST_NAME,EMAIL) 
		values(#{id},#{lastName,jdbcType=NULL},#{email,jdbcType=NULL}) 

針對於上面的我們還得遇見null就得加那個屬性,Mybatis也給我們提供了一種全域性設定,在mybatis-config.xml新增以下配置。

<settings>
	<setting name="jdbcTypeForNull" value="NULL"/>
</settings>

mode呼叫儲存過程

mode 屬性允許指定 IN,OUT 或 INOUT 引數
順便記錄一下oracle儲存過程建立吧。
儲存過程書寫要規範(IN 、OUT 引數一定要寫上,例如:V_YEAR IN INTEGER),不然JAVA呼叫有問題,拿不到儲存過程返回值

CREATE OR REPLACE PROCEDURE STATIC_DIA_QUARTER(V_YEAR    IN INTEGER,
                                               V_QUARTER IN INTEGER) IS
<select id="getAndSaveHyperReport" statementType="CALLABLE" parameterType="java.util.Map" >
  {call STATIC_HYPER_QUARTER(#{year,mode=IN,jdbcType=INTEGER},#{quarter,mode=IN,jdbcType=INTEGER})}
</select>

numericScale保留小數點幾位

#{height,jdbcType=NUMERIC,numericScale=2}) 

相關文章