看起来我必须为 DateTime 和 LocalDateTime Joda 类型实现 com.ibatis.sqlmap.client.extensions.TypeHandlerCallback 。这没什么大不了的,但如果它在其他地方实现,我宁愿只使用它。
问问题
2006 次
2 回答
1
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);
}
于 2010-05-27T14:17:56.603 回答
0
我会把它放在那里......我们只是移动了我们的代码来为 iBatis 和 myBatis 执行此操作。正如大家所提到的,由于 java.sql 包中的限制,使用时区并不有趣。但是,至少使用 LocalDate 和 DateTime 进行正确设置是可能的
请反馈!这个包早
于 2012-03-27T15:05:47.170 回答