私は、hereのように、Spring IntegrationでMyBatisを使用しています。MyBatis/Springでカスタムタイプを使用する
さらに、Java Date APIの代わりにJoda Date APIを使用しています。これで、MyBatisがJoda Date APIを認識して、MyBatisがそれを照会できるようになります。
今、これを達成するための文書化の方法は、私たちが正しいのアノテーションを使用する場合、MyBatisのは、カスタムハンドラをピックアップしsqlsessionfactoryに登録することを想定していますDateTypeHandler
を使用することです。だから私のクラスがいくつかこれは私が何を持っていますどのような、....私のカスタム・タイプのハンドラを登録しませんか、アプリケーションの起動時にこのようなコードを書いている
@MappedTypes(value = DateTime.class)
@MappedJdbcTypes(value = {JdbcType.DATE,JdbcType.TIME,JdbcType.TIMESTAMP})
public class MyBatisJodaDateTimeType extends DateTypeHandler {
......
.....
}
のように見えます
...
私はMyBatisのは、これらのアノテーションのための私のアプリケーションをスキャンし、自動的に私のカスタム型ハンドラを登録するために取得カント、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のコードで検査しなかったし、そこに私のハンドラを見つけることができなかったので、私のタイプは、(単に注釈を使用して)登録されていないことを確信しています....
あなたは私たちがTypehandlerの上に置かれた注釈を削除しても、ハンドラの手動登録を行うコードを削除することができることを示唆していますか?多分それは働くことができますか? ...私はそのシナリオをテストしただけで失敗します。 – Sudarshan
はい、MyBatisの最新のリリースでは、選択と更新の両方で自分自身のために働いています。だから、@MappedTypes(DateTime.class)だけの注釈です。 – usethe4ce
あなたはどのバージョンを教えていただけますか?また、MyBatisとのバネ統合を使用している場合は、 – Sudarshan