0
点赞
收藏
分享

微信扫一扫

SSM Mybatis mysql 存入&读取时间类型数据遇到的问题 DATE DATETIME TIMESTAMP


当我们使用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>

 

举报

相关推荐

0 条评论