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

11 篇文章 4 订阅

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值