大家知道,在实体Entity里面,可以使用Java.、、来映射到数据库的date、timestamp、datetime等字段
但是,、、这些类都不好用,很多方法都过时了。
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层:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/" > <mapper namespace=""> <insert parameterType=""> INSERT INTO tb_java8date (id, t_datetime) VALUES ( #{id,jdbcType=INTEGER}, /*#{tDateTime,jdbcType=TIMESTAMP}*/ now() ) </insert> </mapper>
dao层:
pojo层:package ; import ; public interface DateTestMapper { int insert(DateTest record); }
package ;
import ;
public class DateTest {
private Integer id;
private LocalDateTime tDateTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
= id;
}
public LocalDateTime gettDateTime() {
return tDateTime;
}
public void settDateTime(LocalDateTime tDateTime) {
= tDateTime;
}
}
测试代码,比较懒+新手,直接在原来订单项目加了一个Controller。
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@Controller
@RequestMapping("/cart/")
public class CartTestController {
@Autowired
private DateTestMapper dateTestMapper;
@RequestMapping("")
@ResponseBody
public ServerResponse add(HttpSession session) {
User user = (User) (Const.CURRENT_USER);
if (user == null) {
return (ResponseCode.NEED_LOGIN.getCode(), ResponseCode.NEED_LOGIN.getDesc());
}
DateTest dateTest=new DateTest();
//按照需求 是否在此设置当前日期时间 或者 在mapper中直接用mysql获取当前日期时间的函数 now( )
// (());
int rowCount=(dateTest);
if (rowCount>0){
return ("插入LocalDateTime成功");
}
return ("插入LocalDateTime失败");
}
}
以上仅在mybatis 3.4.0版本中测试有效
如果使用的mybatis版本低于3.4.0,则还需要配置如下