Похоже, мне нужно реализовать com.ibatis.sqlmap.client.extensions.TypeHandlerCallback для типов DateTime и LocalDateTime Joda. Это не большая проблема, но если это реализовано где-то еще, я бы скорее использовал это.Существует ли библиотека с классами интеграции Joda Time/iBATIS?
ответ
Нет чистых и гибких решений IMO. Даты Jodatime более гибкие, чем родные типы JDBC (java.sql.Date
, java.sql.Timestamp
...), и если вы наберете их, вы можете потерять информацию (часовые пояса). «Полную» реализацию (возможно, в обход getDate()
/getTimestamp()
и т. Д. Методы JDBC, например, с использованием строк) будут зависеть от вашего драйвера JDBC и базы данных (и практически ни одна база данных не имеет тип даты и времени, такой же выразительный, как Jodatime).
Вот довольно тривиальная реализация, которую я сделал один раз для LocalDateTime
. Не очень проверенный, и он предполагает, что ваши временные метки базы данных представляют собой локальные даты.
public Object getResult(ResultGetter getter) throws SQLException {
Timestamp date = getter.getTimestamp();
if(date == null) return null;
LocalDateTime ldt = null;
try {
ldt = LocalDateTime.fromDateFields(date);
} catch(IllegalArgumentException e) {
throw new SQLException("illegal value for a LocalDateTime : " + date);
}
return ldt;
}
public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {
java.sql.Timestamp date = null;
if(parameter != null) {
LocalDateTime ldt = (LocalDateTime) parameter;
date = new Timestamp(ldt.toDateTime().getMillis());
}
setter.setTimestamp(date);
}
Я положу это там ... мы просто перенесли наш код, чтобы сделать это для iBatis и myBatis. Как отмечали все, с помощью java.sql ограничений время работы не очень интересно. Тем не менее, можно с правильной настройкой по крайней мере, с LocalDate и DateTime
Пожалуйста дайте обратную связь! Этот пакет является ранним
Только что я опаздываю на вечеринку: https://github.com/LukeL99/joda-time-mybatis –