看起来我必须为DateTime和LocalDateTime Joda类型实现com.ibatis.sqlmap.client.extensions.TypeHandlerCallback。这不是什么大问题,但如果它在其他地方实现,我宁愿只使用它。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
我会把它放在那里......我们只是为iBatis和myBatis移动我们的代码。正如大家所提到的,由于java.sql包中的限制,时区使用起来并不好玩。但是,至少可以使用LocalDate和DateTime
进行正确的设置请提供反馈!这个包是早期的