mybatis與mysql資料庫互動時使用LocalDate類等
阿新 • • 發佈:2021-10-24
在做專案的時候,遇到資料庫中想存入欄位型別為Date類並且只存入yyyy-MM-dd這種只有日期的格式,但是java.util.date和java.sql.date都需要轉換,不是特別的方便.然後後來學習過java8中關於日期的新的類LocalDate,這個可以直接返回一個日期格式為yyyy-MM-dd的,但是返回的型別確實Localdate型別的,此時的我就比較懵了,沒有進一步的學習,現在終於有空學習一下了,在這裡記錄一下,就是解決我們使用localdate類沒有辦法和資料庫中date型別儲存資料的問題.我們知道java.sql.Date、java.sql.Timestamp、java.util.Date這些類都不好用,很多方法都過時了。Java8裡面新出來了一些API,LocalDate、LocalTime、LocalDateTime 非常好用,預設的情況下,在mybatis裡面不支援java8的時間、日期。直接使用,會報如下錯誤
Caused by: java.lang.IllegalStateException: No typehandler found for property createTime at org.apache.ibatis.mapping.ResultMapping$Builder.validate(ResultMapping.java:151) at org.apache.ibatis.mapping.ResultMapping$Builder.build(ResultMapping.java:140) at org.apache.ibatis.builder.MapperBuilderAssistant.buildResultMapping(MapperBuilderAssistant.java:382) at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:378) at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:280) at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:252) at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:244) at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116) ... 81 common frames omitted
那麼我們應該如何解決這個問題呢?
如果是Mybatis3.4.5之前的版本,需要新增一個依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency> <!-- mybatis資料庫欄位型別對映,此處是重點 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.1</version> </dependency> <!-- MYSQL驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
如果是Mybatis3.4.5之後,則不需要添加了,因為已經支援了上面的依賴的內容。個人推薦使用3.4.5之後的。我們只需要知道對應time類下對應的那些localdate類需要對應到資料庫的哪一個型別就可以了。
上面就是一個數據庫中的型別和pojo類中日期型別的對應。
只需要在型別對應好,便可以像普通的資料型別一樣去實現互動了。