2016-08-01 63 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来检查它是否实际调用。

然后,只需从全局配置中删除类型处理程序,并仅在语句中引用它。 先尝试别名:使用全限定名称。