en utilisant des types de MyBatis/Printemps
Je suis à l'aide de MyBatis avec le Printemps de l'Intégration comme décrit ici.
Je suis plus à l'aide de la Joda Date API au lieu de Java Date de l'API, maintenant le problème est de s'assurer que MyBatis reconnaît le Joda Date de l'API, et me permet d'interroger le même.
Maintenant documenté la façon d'y parvenir est d'utiliser un DateTypeHandler
Je pars du principe que si nous utilisons la bonne annotations, Mybatis sera ramasser le gestionnaire personnalisé et l'enregistrer avec le sqlsessionfactory.
Donc ma classe ressemble à
@MappedTypes(value = DateTime.class)
@MappedJdbcTypes(value = {JdbcType.DATE,JdbcType.TIME,JdbcType.TIMESTAMP})
public class MyBatisJodaDateTimeType extends DateTypeHandler {
......
.....
}
Une certaine façon cela ne veut pas enregistrer mon Type Personnalisé gestionnaire ...., Ce que je vais avoir à faire, c'est écrire du code comme ceci au démarrage de l'application ...
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);
Je sais que cela ressemble à de la merde et je veux l'éviter, ne puis-je pas obtenir MyBatis analyse de mon application pour ces annotations, puis d'enregistrer mon type personnalisé gestionnaire automatiquement ?
Je suis sûr que mon type n'a pas été enregistré (en Utilisant seulement les annotations) parce que j'ai fait inspecter dans le MYBatis code et ne pouvait pas trouver mon gestionnaire de là ....
OriginalL'auteur Sudarshan | 2012-01-11
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème, également pour un Joda DateTime TypeHandler. Suivi par le biais d', je vois que le gestionnaire est effectivement enregistrée. Cependant,
TypeHandlerRegistry.getTypeHandler
semble utiliser unnull
jdbcType pour rechercher le gestionnaire.Maintenant, la dernière ligne dans votre extrait de code ci-dessus explicitement enregistre un gestionnaire pour
null
JdbcType. Malheureusement, il semble impossible d'inclurenull
dans le@MappedJdbcTypes
annotation. Donc qui ressemble à un bug pour moi.Oh, et vous pouvez être en mesure d'enlever les
@MappedJdbcTypes
annotation au total, pour le faire fonctionner.Mise à JOUR:
Voici comment j'ai configurer dans mon applicationContext.xml:
Si vous chercher gestionnaires de type par la numérisation d'un paquet comme ça, vous pouvez définir la MyBatis niveau de journalisation de débogage pour voir ceux qui il tente d'ajouter.
Mon TypeHandler commence comme ceci:
Oui, voilà comment je l'ai eu à travailler pour moi-même, dans la dernière MyBatis de presse, pour les sélectionne et les mises à jour. Donc, la seule annotation @MappedTypes(DateTime.class).
Pouvez-vous me dire quelle version ? et aussi, si vous utilisez le printemps de l'intégration avec MyBatis ?
Oui, MyBatis 3.0.6, MyBatis-Printemps 1.0.2.
J'utilise la même version, mais quand je debug de l'application, je vois que la TYPE_HANDLER_MAP n'a pas DateTime.class enregistré ... Avez-vous fait quoi que ce soit dans votre printemps configs qui permet l'enregistrement ..
OriginalL'auteur usethe4ce