SpringBoot使用Mybatis查询,日期丢失时分秒,总显示00:00:00

最近的项目更换为MySQL数据库,在使用Mybatis查询数据库时,发现日期字段只能查询出年月日,丢失时分秒,经过一点一点地排查,最后发现是个很小的问题,真是被自己蠢哭了。
(本文使用MySQL数据库)

话不多说先来看问题。

接口返回值(部分)

接口返回值

数据库中查询的结果

数据库中的值
只有时间是对不上的,到底为什么!! 于是开始了一系列的排查。

一. 检查Mapper.xml文件和数据表字段是否一致

  1. 检查数据库表的字段类型
    mysql表中的字段类型是date(yyyy-MM-dd),还是datetime(yyyy-MM-dd HH:mm:ss)。本项目定义的为datetime类型。
  2. 检查xml文件中定义的类型
<resultMap id="XXX" type="xxx">
	...
	<result column="DATETIME" property="dateTime"/>
	...
</resultMap>

刚开始以为是没有定义jdbcType="TIMESTAMP"导致的错误,加上去重新启动项目查询接口,结果还是丢失时分秒。详细搜索了一下,发现不是没有定义jdbcType="TIMESTAMP"的问题,在省略不写的情况下Mybatis默认是TIMESTAMP类型。

如果有小伙伴这里定义的jdbcType=“DATE”,而数据表中的类型为datetime,或许就是你的问题所在哦,改为jdbcType="TIMESTAMP"试试。

既然不是数据类型的问题,会不会是在开始定义JavaBean的时候就出问题了?

二. 检查POJO中的定义

pojo中的定义如下:

//记录日期及时间
    @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd HH:mm:ss")
    private Date dateTime;

看上去没什么问题,可为什么就是不显示时分秒呢???换了其他接口查询,突然发现还是有接口能正常查询出时间的。
正常查询出时间的接口
直接给我整懵了,因为在POJO中定义的类型都是一样的,咋回事呢。对比了一下两个POJO文件的不同,发现在import的时候粗心了!!!找到原因所在了。
在第一个POJO中引入的是这样的:

import java.sql.Date;

而在查询结果正常的POJO中引入是这样的:

import java.util.Date;

将POJO中所有时间有关的引入都修改为【java.util.Date】就好了。正常接口查询结果如下:
正确查询的接口结果

原因:java.util.date是java.sql.date的父类,java.sql.date的时间格式是年-月-日,没有时间部分。java.util.Date表示特定的瞬间,精确到毫秒。如果数据类型时需要存储时分秒,则引入util包更方便!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值