Search code examples
javamybatisspring-mybatis

ZonedDateTime in mybatis property map for insert to MS-SQL


I have a class (call it class A) that contains as an attribute a sub-class (call it class B).

So

public class Request {
    private User user;
    private ZonedDateTime requestTime;
    //getters,setters
 }
public class User  {
   private Integer userID;
     //getters,setters

What I am trying to do is insert the request, or in code (assuming myUser and loggerMapper are already created):

Request myRequest = new Request(); 
myRequest.setuser(myUser);
ZonedDateTime z = ZonedDateTime.now();
myRequest.setrequestTime(z);
loggerMapper.logRequest(myRequest);

Where I have an interface:

public interface loggerMapper {
    Boolean logRequest(Request myRequest);
}

And an xml mapper like such:

<insert id="logRequest" parameterType="map">
    insert into  Request(userID,requestTime)
    values (#{userID},#{requestTime})
</insert>

myBatis absolutley hates the ZonedDateTime, it just barfs about

java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'requestTime'.


Solution

  • I answered this by using Joda Time and a custom typehandler.

    Have a look here: http://noobjuggler.blogspot.com/2012/01/mybatis-spring-and-joda-datetime-solved.html