Utilisez un TypeHandler implicite basé sur resultType pour select dans MyBatis

Je suis en train de sélectionner un timestamp dans MyBatis et de le retourner comme un LocalDateTime (à partir de joda-time).

Ma configuration fonctionne très bien si je tente de retourner le résultat en java.sql.Timestamp. J'ai prouvé mon type de gestionnaire fonctionne très bien: si j'utilise un emballage de classe avec un LocalDateTime comme seul champ et un resultMap dans le MyBatis mappeur de fichier, j'obtiens des résultats corrects.

Cependant, quand j'ai essayer de préciser la org.joda.time.LocalDateTime comme resultType pour cette sélection, j'ai toujours nullcomme si le type de gestionnaire est ignoré.

C'est ma compréhension que MyBatis utilise une valeur par défaut typeHandler dans le cas que j'ai resultType="java.sql.Timestamp". En conséquence, je m'attendais à utiliser l'un des typeHandlers j'ai configuré lors de la réunion resultType="org.joda.time.LocalDateTime".

Ai-je raté quelque chose? Est-il un moyen de faire usage de mes typeHandler ou suis-je obligé de faire un wrapper de classe et resultMap? C'est mon secours à une solution, mais je voudrais éviter si possible.

Toute aide appréciée. Merci.

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeHandlers>
        <typeHandler javaType="org.joda.time.LocalDate" jdbcType="DATE" handler="...LocalDateTypeHandler"/>
        <typeHandler javaType="org.joda.time.LocalDateTime" jdbcType="TIMESTAMP" handler="...LocalDateTimeTypeHandler"/>
    </typeHandlers>
</configuration>

NotifMailDao.java

import org.joda.time.LocalDateTime;

public interface NotifMailDao {

    LocalDateTime getLastNotifTime(String userId);
}

NotifMailDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="lu.bgl.notif.mail.dao.NotifMailDao">

    <select id="getLastNotifTime" resultType="org.joda.time.LocalDateTime">
        SELECT current_timestamp
        AS last_time
        FROM DUAL
    </select>
</mapper>

source d'informationauteur Chop