2016-08-01 5 views
0

Ich versuche, den Typehandler für eine insert-Anweisung in mybatis zu verwenden, aber es funktioniert nicht. Ich verwende mybatis-spring 1.2.1, mybatis 3.2.3. Aber ich bekomme eine Fehlermeldung, die besagt, dass Parameter 2 nicht gesetzt ist. Hier ist der Code,myBatis: typehandler in insert-Anweisungen verwenden

Mybatis Konfigurationsdatei:

<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> 

Mapper 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> 

Antwort

0

Typ-Handler in Mybatis config-Datei deklariert werden soll global angewendet werden, dann Vorsicht vor Nebeneffekten, insbesondere wenn es sich um gängige Typen wie java.lang.String handelt.

In diesem Fall würde mybatis den Typhandler auf jede Zeichenfolge anwenden, um sie in den SQL-Zeitstempel zu konvertieren. Und ich nehme an, dass Sie wollen, dass die meisten String-Parameter unverändert übergeben werden.

Zuerst fügen Sie Protokolle in Methode TSTypeHandler.setNonNullParameter hinzu, um zu überprüfen, ob es tatsächlich aufgerufen wird oder nicht.

Dann entfernen Sie einfach Typ Handler von der globalen Konfiguration und verweisen Sie nur in Anweisung. Zuerst ohne Alias ​​versuchen: Verwenden Sie den vollständig qualifizierten Namen.