Я пытаюсь выбрать временную метку в MyBatis и возвращать ее как LocalDateTime (от joda-time).
Моя конфигурация отлично работает, если я попытаюсь вернуть результат как java.sql.Timestamp
. Я доказал, что мой обработчик типа отлично работает: если я использую класс упаковки с LocalDateTime
как только полем и resultMap в файле MapBaris, я получаю правильные результаты.
Однако, когда я пытаюсь указать org.joda.time.LocalDateTime
как resultType
для этого select, я всегда получаю null
, как если бы обработчик типа игнорировался.
Насколько я понимаю, MyBatis использует типHandler по умолчанию, если у меня есть resultType="java.sql.Timestamp"
. Как следствие, я ожидал, что он будет использовать один из типов, которые я настроил при встрече resultType="org.joda.time.LocalDateTime"
.
Я что-то пропустил? Есть ли способ использовать мой типHandler, или я вынужден сделать класс-оболочку и resultMap? Это мое решение для отказа, но я хотел бы избежать его, если это возможно.
Любая помощь оценивается. Спасибо.
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>