2016-08-01 88 views
0

嘗試在mybatis中爲插入語句使用typehandler,但它不起作用。我正在使用mybatis-spring 1.2.1,mybatis 3.2.3。但我收到一條錯誤消息,說沒有設置參數2。 下面是代碼,myBatis:在插入語句中使用typehandlers

MyBatis的配置文件:

<configuration> 
     <typeAliases> 
      ....... 
      ......... 
      <typeAlias type="org.test.util.TSTypeHandler" alias="TSTypeHandler"/> 
     </typeAliases> 
     <typeHandlers> 
      ....... 
    <typeHandler handler="TSTypeHandler" javaType="java.lang.String" jdbcType="TIMESTAMP"/> 
    </typeHandlers> 
    <mappers> 
     ...... 
    </mappers> 
</configuration> 

映射器的xml:

<insert id="saveMyOutput"> 
     INSERT INTO TEST.MY_OUTPUT (
     YEAR, 
     RUN_TMS, 
     PRODUCT 
     ) 
     VALUES 
     <foreach item="element" index="index" collection="mOutput" 
      open="(" separator="),(" close=")"> 
      #{element.year}, 
      #{element.runTS, typeHandler=TSTypeHandler}, 
      #{element.product} 
     </foreach> 
    </insert> 

回答

0

在MyBatis的配置文件中聲明的類型處理器都旨在被全局地應用,然後注意副作用,特別是當涉及到java.lang.String這樣的常見類型時。

在這種情況下,mybatis會將類型處理程序應用於每個字符串以將其轉換爲SQL時間戳。我想你希望大部分字符串參數都是按原樣傳遞的。

首先,在方法中添加日誌TSTypeHandler.setNonNullParameter來檢查它是否實際調用。

然後,只需從全局配置中刪除類型處理程序,並僅在語句中引用它。 先嚐試別名:使用全限定名稱。