i am using ibatis to replace JDBC in a old system. Many old bean are using Calendar instead of Date。So i am considering write aTypeHandlerCallbackto handler the translation.

the class implement TypeHandlerCallback:

public class CalendarTypeHandlerCallback implements TypeHandlerCallback {

 public Object getResult(ResultGetter getter) throws SQLException {
  String s = getter.getString();
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  Calendar cdate = Calendar.getInstance();
  try {
   Date date = format.parse(s);
   cdate.setTime(date);
  } catch (Exception e) {
  }
  return cdate;
 }

 public void setParameter(ParameterSetter setter, Object parameter)
   throws SQLException {
  Calendar cdate = (Calendar)parameter;
  java.sql.Timestamp time = new java.sql.Timestamp(cdate.getTimeInMillis());
  setter.setTimestamp(time);
 }

 public Object valueOf(String s) {
  Calendar cdate = Calendar.getInstance();
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  try {
   Date date = format.parse(s);
   cdate.setTime(date);
  } catch (Exception e) {
  }
  return cdate;
 }

}

the map xml:


        PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-2.dtd">

 


  
    
    
    
    
    
    
    
    
    
     

     javaType="Calendar" jdbcType="TIMESTAMPE" typeHandler="an.flex.ibatis.CalendarTypeHandlerCallback"/>
    
     javaType="Calendar" jdbcType="TIMESTAMPE" typeHandler="an.flex.ibatis.CalendarTypeHandlerCallback"/>  

  

  
    select * from tunnels
  


 INSERT INTO tunnels (TYPE, NAME, DESCRIPTION, TRANSPORT, USERNAME,
 SOURCE_PORT, DESTINATION_PORT, DESTINATION_HOST, AUTO_START,
 DATE_CREATED, DATE_AMENDED)
 VALUES (#type#, #resourceName#, #resourceDescription#, #transport#,#username#,
 #sourcePort#,#destination_port#,#destination_host#, #autoStart#,
#dateCreated,handler=an.flex.ibatis.CalendarTypeHandlerCallback#,
 #dateAmended,handler=an.flex.ibatis.CalendarTypeHandlerCallback#)


 
 SELECT LAST_INSERT_ID() AS ID
 


 delete from tunnels


 delete from tunnels where TUNNEL_ID = #resourceId#