Apr 18, 2018

MyBatis and Kotlin

I wanted to do a little sample application in Kotlin. I’m getting tired of using JPA for all the things, so I decided to try out MyBatis. I had used MyBatis with great success years ago, before it got configuration by annotations. And it has a Spring Boot starter, so that makes things even easier. It really went well until I added a lastUpdated field in my object. And then I got this error:

Caused by: org.apache.ibatis.executor.ExecutorException: No constructor 
found in com.objectpartners.demo.domain.Game matching [java.lang.Integer, java.lang.String, java.lang.Integer, java.sql.Timestamp]

After banging my head too long on it, the fix was pretty simple: Kotlin wasn’t able to coerce the java.sql.Timestamp that the JDBC driver was handing back into a java.time.LocalDateTime, so I just needed a constructor to help. Ironically the error tells you that but my Kotlin-fu is small. So I made this:

constructor( gameId: Int,
              name:String,
              bggId :Int ,
              sqlTimestamp: Timestamp): this(gameId,name,bggId,sqlTimestamp.toLocalDateTime())

Overall, Kotlin and MyBatis work really well together. You can see my (very) simple demo on GitHub.

About the Author

Mike Hostetler profile.

Mike Hostetler

Principal Technologist

Mike has almost 20 years of experience in technology. He started in networking and Unix administration, and grew into technical support and QA testing. But he has always done some development on the side and decided a few years ago to pursue it full-time. His history of working with users gives Mike a unique perspective on writing software.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Blog Posts
Using Conftest to Validate Configuration Files
Conftest is a utility within the Open Policy Agent ecosystem that helps simplify writing validation tests against configuration files. In a previous blog post, I wrote about using the Open Policy Agent utility directly to […]
SwiftGen with Image & Color Asset Catalogs
You might remember back in 2015 when iOS 9 was introduced, and we were finally given a way to manage all of our assets in one place with Asset Catalogs. A few years later, support […]
Tracking Original URL Through Authentication
If you read my other post about refreshing AWS tokens, then you probably have a use case for keeping track of the original requested resource while the user goes through authentication so you can route […]
Using Spring Beans in a Kafka Streams ExceptionHandler
There are many things to know before diving into Kafka Streams. If you haven’t already, check out these 5 things as a starting point. Bullet 2 mentions designing for exceptions. Ironically, this seems to be […]