springmvc3.2.0
mybatis1.2.2
问题描述:POJO类中存在date类型,但是通过mybatis存入之后只有年月日,没有时分秒
问题定位:
1、确定插入之前的date是否正确
article是一个pojo类
Date date = new Date();
article.setTime(date);
System.out.println(article.getTime());
打印结果:Mon Aug 15 16:58:02 CST 2016
说明存入之前的日期包括年月日和时分秒
2、确定插入之后的date是否正确
打印插入后该数据
System.out.println(article.getTime());
打印结果:Mon Aug 15 00:00:00 CST 2016
3、通过1和2确定问题,问题发生在数据库交互过程中,即使用mybatis进行插入数据导致日期不完整
对于Ibatis操作Date/Time/DateTime,总结如下:
将pojo的属性类型设置为java.sql.Date(或java.sql.Time, java.sql.Timestamp),此时会严格遵循这三种类型的语义。但此方法因存在前文中提到的性能问题,在JDK1.6以前的JDK版本中能少使用就少使用。
如果你想在pojo中使用java.util.Date, 则要注意:
完整的日期时间,,要确保jdbcType为空,或为DATE,TIME以外的值
只需要时间,要指定jdbcType=”TIME”
只需要日期,要指定jdbcType=”DATE”
于是将映射的XML文件里的,jdbcType="DATE"这段代码清了就可以了。特此记录
注意:在网上搜了一下,大部分都是这个回答,于是跑去改映射文件的xml,有
<result column="time" property="time" jdbcType="DATE" />
{time,jdbcType=DATE}
两种,清空后报错,改成TIMESTAMP,也报错
看了数据库表设计,time类型写的Date,改成timestamp,重新生成映射文件
总结:将数据库表设计,time类型,date→timestamp,重新生成映射文件
重复2,打印:Mon Aug 15 16:40:49 CST 2016
数据库已经存入,年月日,时分秒
4、通过json返回数据
获取到的结果:"time":1471251908000
说明:通过springmvc读取json的日期错误
解决方法:
实体类的get方法设置@JsonFormat的注解配置
要引入jackson-core.jar,jackson-databind.jar,jackson-annotations.jar(2.x的包)才会自动转换json
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
public Date getTime() {
return time;
}
获取到的结果:"time":"2016-08-15 17:05:08"
在进行springmvc 的json 日期显示,搜了网上,发现有好多都是在自定义然后在spring自动注解进行注册,直接添加 @JsonFormat就可以解决问题
参考资料:
mybatis存入数据库后没有时分秒 时间不全 只有年月日
http://www.68idc.cn/help/buildlang/ask/20150305251565.html
spring mvc4使用及json 日期转换解决方案
http://blog.youkuaiyun.com/zhanngle/article/details/24123659