Frage

Ich benutze MyBatis mit Frühlingsintegration wie beschrieben hier.

Ich verwende die Joda -Datum -API anstelle der Java -Datum -API weiter. Jetzt ist das knifflige Bit sicher, dass MyBatis die Joda -Datum -API erkennt und es mir ermöglicht, dasselbe abzufragen.

Jetzt ist der dokumentierte Weg, dies zu erreichen DATETypeHandler

Ich gehe davon aus, dass MyBatis den benutzerdefinierten Handler aufnimmt und beim SQLSessionFactory registriert wird, wenn wir die richtigen Anmerkungen verwenden.

Also sieht meine Klasse aus wie aus

@MappedTypes(value = DateTime.class)
@MappedJdbcTypes(value = {JdbcType.DATE,JdbcType.TIME,JdbcType.TIMESTAMP})

public class MyBatisJodaDateTimeType extends DateTypeHandler {
......
.....
}

Einige, wie dies nicht meinen benutzerdefinierten Typ Handler registriert hat.

 SqlSessionFactory mybatisSessionFactory = applicationContext.getBean("sqlSessionFactory", SqlSessionFactory.class);
        MyBatisJodaDateTimeType myBatisJodaDateTimeType = applicationContext.getBean("myBatisJodaDateTimeType", MyBatisJodaDateTimeType.class);

        mybatisSessionFactory.getConfiguration().getTypeHandlerRegistry().register(DateTime.class, myBatisJodaDateTimeType);
        mybatisSessionFactory.getConfiguration().getTypeHandlerRegistry().register(DateTime.class, JdbcType.DATE, myBatisJodaDateTimeType);
        mybatisSessionFactory.getConfiguration().getTypeHandlerRegistry().register(DateTime.class, JdbcType.TIME, myBatisJodaDateTimeType);
        mybatisSessionFactory.getConfiguration().getTypeHandlerRegistry().register(DateTime.class, JdbcType.TIMESTAMP, myBatisJodaDateTimeType);
        mybatisSessionFactory.getConfiguration().getTypeHandlerRegistry().register(DateTime.class, null, myBatisJodaDateTimeType);

Ich weiß, dass es nach Mist aussieht und ich möchte es vermeiden. Kann ich MyBatis nicht dazu bringen, meine Anwendung nach diesen Anmerkungen zu scannen und dann meinen benutzerdefinierten Typ -Handler automatisch zu registrieren?

Ich bin sicher, dass mein Typ nicht registriert wurde (nur mit den Anmerkungen), weil ich einen Inspektion im MyBatis -Code durchgeführt habe und meinen Handler dort nicht finden konnte ....

War es hilfreich?

Lösung

Ich bin auf das gleiche Problem gestoßen, auch für einen Joda DateTime TypeHandler. Wenn ich durchverfolgt, sehe ich, dass der Handler ist tatsächlich registriert. Jedoch, TypeHandlerRegistry.getTypeHandler scheint a zu verwenden null JdbcType, um den Handler nachzuschlagen.

Jetzt registriert die letzte Zeile in Ihrem Code -Snippet oben explizit einen Handler für null JdbcType. Leider scheint es unmöglich zu sein, einzubeziehen null in dem @MappedJdbcTypes Anmerkung. Das sieht für mich aus wie ein Fehler.

Oh, und Sie können das möglicherweise einfach entfernen @MappedJdbcTypes Annotation insgesamt, um es zum Laufen zu bringen.

AKTUALISIEREN:

So habe ich in meiner applicationContext.xml eingerichtet:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:META-INF/persistence/*.xml" />
    <property name="typeAliasesPackage" value="com.mycompany.data" />
    <property name="typeHandlersPackage" value="com.mycompany.typehandler" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.mycompany.persistence" />
</bean>

Wenn Sie Typler mit dem Scannen eines Pakets wie diesem aufnehmen, können Sie die MyBatis -Protokollierungsstufe auf Debuggen festlegen, um zu sehen, welche sie hinzufügen möchten.

Mein Typhandler beginnt so:

@MappedTypes(DateTime.class)
public class DateTimeTypeHandler implements TypeHandler<DateTime> {...}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top