当我们使用mybatis框架连接mysql数据库时,操作 时间类型的数据时,会遇到以下两种情况:
问题一.存入的数据在数据库里面显示只有年月日,时分秒全部是是0,如: 2019-08-02 00:00:00
简述发生场景:这种情况,是因为mysql数据库里的相关字段的类型是 date,xml使用的类型也是DATE,java字段类型也是Date, 只截取了年月日。
问题二.存入的数据显示年月日时分秒,但是取出来作为接口返回值时,统一变成了时间戳,如:1562345092000
简述发生场景:这种情况,是因为mysql数据库里的相关字段类型是datetime,xml使用的类型,是TIMESTAMP,java字段类型是Date,所以数据库里面能正常显示时分秒,但是当取出的值需要放入ResponseBody返回时,发现变成了时间戳。
PS:存入的时间在数据库里面显示发现时间对不上,少了好几个小时的情况,直接在连接数据库的url后拼接上&serverTimezone=GMT%2B8
如:
url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
以上两种情况都是非常常见的,那么我们应当怎么去应对这些情况呢?
最终目标: 存入数据库显示 ‘年月日 时分秒’ 如 :2019-08-05 11:16:46
取出数据返回显示 ‘年月日 时分秒’ 如 :2019-08-05 11:16:46
A 解决方案:
我们对应的时间字段,不管在数据库还是java类还是xml,都采取String类型存与取。
这样 就是在存入的时候就需要采取获取对应的时间格式化数据,再进行写入数据库。
用String去存入时间,在mysql里面,按时间排序,选取区间、范围等还是一样操作,无影响。
B 解决方案:
数据库时间字段采取datetime类型,java类采取Date类型,xml采取TIMESTAMP,
然后在spring配置文件加上以下的ResponseBody参数格式转化配置:
<!-- 开启mvc注解 -->
<mvc:annotation-driven >
<!-- 处理responseBody 里面日期类型 -->
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>