Я использую MyBatis с интеграцией с пружиной, как описано here.с использованием пользовательских типов в MyBatis/Spring
Я использую API-интерфейс Joda Date вместо API дат Java, теперь сложный бит гарантирует, что MyBatis распознает API дат Joda и позволяет мне запрашивать то же самое.
Теперь документированный способ достижения этой цели является использование 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 и не мог найти свой обработчик там ....
Вы предлагаете, чтобы мы могли удалить аннотацию размещенную на Typehandler, а также удалить код, который делает вручную, регистрирующий обработчик? и тогда, может быть, это может сработать? ... Я только что протестировал этот сценарий, и он не прошел – Sudarshan
Да, вот как я заработал для себя, в последней версии MyBatis, для выбора и обновления. Таким образом, единственная аннотация - @MappedTypes (DateTime.class). – usethe4ce
Можете ли вы сказать мне, какая версия? а также если вы используете интеграцию Spring с MyBatis? – Sudarshan