Я использую MyBatis с интеграцией Spring, как описано здесь.
Далее я использую Joda Date API вместо Java Date API, теперь сложнее убедиться, что MyBatis распознает Joda Date API и позволяет мне запрашивать то же самое.
Теперь задокументированный способ добиться этого — использовать DateTypeHandler
Я предполагаю, что если мы используем правильные аннотации, Mybatis подберет пользовательский обработчик и зарегистрирует его в sqlsessionfactory.
Так выглядит мой класс
@MappedTypes(value = DateTime.class)
@MappedJdbcTypes(value = {JdbcType.DATE,JdbcType.TIME,JdbcType.TIMESTAMP})
public class MyBatisJodaDateTimeType extends DateTypeHandler {
......
.....
}
Каким-то образом это не регистрирует мой обработчик пользовательского типа .... Что мне нужно сделать, так это написать такой код при запуске приложения ...
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);
Я знаю, что это выглядит как дерьмо, и я хочу избежать этого, не могу ли я заставить MyBatis сканировать мое приложение на наличие этих аннотаций, а затем автоматически зарегистрировать обработчик моего пользовательского типа?
Я уверен, что мой тип не был зарегистрирован (используя только аннотации), потому что я проверил код MYBatis и не смог найти там свой обработчик....