衆所周知,在實體Entity裏面,能夠使用Java.sql.Date、java.sql.Timestamp、java.util.Date來映射到數據庫的date、timestamp、datetime等字段,可是,java.sql.Date、java.sql.Timestamp、java.util.Date這些類都很差用,不少方法都過期了。java
Java8裏面新出來了一些API,LocalDate、LocalTime、LocalDateTime 很是好用,默認的狀況下,在mybatis裏面不支持java8的時間、日期。直接使用,會報以下錯誤mysql
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
導入依賴
<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>
屬性配置
spring.datasource.url=jdbc:mysql://localhost:3306/dev?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false spring.datasource.username=root spring.datasource.password=123456 # 若是想看到mybatis日誌須要作以下配置 logging.level.com.carry=DEBUG ######### Mybatis 自身配置 ########## mybatis.mapper-locations=classpath:com/carry/mapper/*Mapper.xml mybatis.type-aliases-package=com.carry.dto # 駝峯命名規範 如:數據庫字段是 order_id 那麼 實體字段就要寫成 orderId mybatis.configuration.map-underscore-to-camel-case=true ######### 通用Mapper ########## # 主鍵自增回寫方法,默認值MYSQL,詳細說明請看文檔 mapper.identity=MYSQL mapper.mappers=tk.mybatis.mapper.common.Mapper # 設置 insert 和 update 中,是否判斷字符串類型!='' mapper.not-empty=true # 枚舉按簡單類型處理 mapper.enum-as-simple-type=true
建表SQL
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `create_date` date DEFAULT NULL, `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) )
實體類
package com.carry.dto;import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;webimport javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;springimport com.fasterxml.jackson.annotation.JsonFormat;sql
public class User implements Serializable{數據庫
}apache
</span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> <span style="color: #0000ff;">long</span> serialVersionUID = -108907189034815108L<span style="color: #000000;">; @Id @GeneratedValue(strategy </span>=<span style="color: #000000;"> GenerationType.IDENTITY) </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Long id; @JsonFormat(pattern </span>= "yyyy-MM-dd"<span style="color: #000000;">) </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> LocalDate createDate; @JsonFormat(pattern </span>= "yyyy-MM-dd HH:mm:ss"<span style="color: #000000;">) </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> LocalDateTime createTime; </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getId() { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> id; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setId(Long id) { </span><span style="color: #0000ff;">this</span>.id =<span style="color: #000000;"> id; } </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> LocalDate getCreateDate() { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> createDate; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setCreateDate(LocalDate createDate) { </span><span style="color: #0000ff;">this</span>.createDate =<span style="color: #000000;"> createDate; } </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> LocalDateTime getCreateTime() { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> createTime; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setCreateTime(LocalDateTime createTime) { </span><span style="color: #0000ff;">this</span>.createTime =<span style="color: #000000;"> createTime; }
Mapper類
package com.carry.mapper;import com.carry.dto.User;mybatis
import tk.mybatis.mapper.common.Mapper;app
public interface UserMapper extends Mapper<User> {ide
}
啓動類
package com.carry;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = "com.carry.mapper")
public class SpringBootDateMysqlApplication {
public static void main(String[] args) { SpringApplication.run(SpringBootDateMysqlApplication.class, args);
} }
測試
package com.carry;import java.time.LocalDate;
import java.time.LocalDateTime;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import com.carry.dto.User;
import com.carry.mapper.UserMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDateMysqlApplicationTests {}
@Autowired </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> UserMapper mapper; @Autowired </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> ObjectMapper objectMapper; @Test </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> insert() { User user </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> User(); user.setCreateDate(LocalDate.now()); user.setCreateTime(LocalDateTime.now()); mapper.insertSelective(user); } @Test </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> query() { mapper.selectAll().stream().forEach(e </span>-><span style="color: #000000;"> { </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> { System.out.println(objectMapper.writeValueAsString(e)); } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (JsonProcessingException ex) { ex.printStackTrace(); } }); }
前後執行測試方法 insert 和 query,無錯誤說明測試經過
SpringBootDateMysql
原文地址:https://blog.csdn.net/kingboyworld/article/details/75808108