大家知道,在实体Entity里面,可以使用Java.sql.Date、java.sql.Timestamp、java.util.Date来映射到数据库的date、timestamp、datetime等字段
但是,java.sql.Date、java.sql.Timestamp、java.util.Date这些类都不好用,很多方法都过时了。
Java8里面新出来了一些API,LocalDate、LocalTime、LocalDateTime 非常好用
默认的情况下,在mybatis里面不支持java8的时间、日期。直接使用,会报如下错误
直接加入如下依赖
配置好这个依赖之后,就可以把Entity里面的Date替换成LocalDate、LocalDateTime了,其他的不用改
我个人的测试核心代码:
首先创建表:
create table tb_java8date (id int not null primary key auto_increment, t_datetime datetime);
mapper层:
INSERT INTO tb_java8date (id, t_datetime)
VALUES ( #{id,jdbcType=INTEGER}, /*#{tDateTime,jdbcType=TIMESTAMP}*/ now() )
dao层:
package com.mmall.dao;
import com.mmall.pojo.DateTest;
public interface DateTestMapper {
int insert(DateTest record);
}
pojo层:
package com.mmall.pojo;
import java.time.LocalDateTime;
public class DateTest {
private Integer id;
private LocalDateTime tDateTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public LocalDateTime gettDateTime() {
return tDateTime;
}
public void settDateTime(LocalDateTime tDateTime) {
this.tDateTime = tDateTime;
}
}
测试代码,比较懒+新手,直接在原来订单项目加了一个Controller。
package com.mmall.controller.portal;
import com.mmall.common.Const;
import com.mmall.common.ResponseCode;
import com.mmall.common.ServerResponse;
import com.mmall.dao.DateTestMapper;
import com.mmall.pojo.DateTest;
import com.mmall.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.Date;
@Controller
@RequestMapping("/cart/")
public class CartTestController {
@Autowired
private DateTestMapper dateTestMapper;
@RequestMapping("add1.do")
@ResponseBody
public ServerResponse add(HttpSession session) {
User user = (User) session.getAttribute(Const.CURRENT_USER);
if (user == null) {
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), ResponseCode.NEED_LOGIN.getDesc());
}
DateTest dateTest=new DateTest();
//按照需求 是否在此设置当前日期时间 或者 在mapper中直接用mysql获取当前日期时间的函数 now( )
// dateTest.settDateTime(LocalDateTime.now());
int rowCount=dateTestMapper.insert(dateTest);
if (rowCount>0){
return ServerResponse.createBySuccessMessage("插入LocalDateTime成功");
}
return ServerResponse.createByErrorMessage("插入LocalDateTime失败");
}
}
以上仅在mybatis 3.4.0版本中测试有效
如果使用的mybatis版本低于3.4.0,则还需要配置如下