1

看起来我必须为 DateTime 和 LocalDateTime Joda 类型实现 com.ibatis.sqlmap.client.extensions.TypeHandlerCallback 。这没什么大不了的,但如果它在其他地方实现,我宁愿只使用它。

4

2 回答 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 回答