陕西省住房城乡建设厅网站管理中心,小榄做网站企业,淘宝官网首页版本,电脑平面设计主要做什么在使用 MYBATIS 读取数据库字段的时候#xff0c;我们一般需要为查询字段指定数据类型。特别是当我们使用 mybatis generator 去生成对应的接口代码时#xff0c;会自动按照数据库字段类型生成响应映射规则的代码。 如下#xff0c;左侧是 date 类型生成的字段映射规则我们一般需要为查询字段指定数据类型。特别是当我们使用 mybatis generator 去生成对应的接口代码时会自动按照数据库字段类型生成响应映射规则的代码。 如下左侧是 date 类型生成的字段映射规则右侧是 datetime 或者 timestamp 类型生成的字段映射规则。
可能出现的问题
数据库存储了 date 类型的字段代码中使用了 JdbcType.DATE 做字段映射导致 mybatis 读取出来的日期有时候会少一天。 例如数据库日期字段值为 1991-07-01 读取到 java 的时间转为 CST 时区时间变成了 1991-06-30 23:00:00
解决方案
将 jdbcTypeJdbcType.DATE 修改为 jdbcTypeJdbcType.TIMESTAMP
问题重现jdbcTypeJdbcType.DATE
先了解一下夏令时执行时间段 1986年至1991年中华人民共和国在全国范围实行了六年夏令时每年从4月中旬的第一个星期日2时整北京时间到9月中旬第一个星期日的凌晨2时整北京夏令时。除1986年因是实行夏令时的第一年从5月4日开始到9月14日结束外其它年份均按规定的时段施行。夏令时实施期间将时间向后调快一小时。1992年4月5日后不再实行。 1、前端传递的日期字符串为 1991-07-01后端时区设置为 GMT8 反序列化得到时间为 Mon Jul 01 01:00:00 CDT 1991夏令时时间 1991-07-01 01:00:00 2、mybatis 保存该时间数据时解析为字符串 1991-07-01 DATE 类型只保留年月日数据库内存储为 1991-07-01 3、mybatis 再次读取时由于不包含时分秒信息反序列化得到的时间为 Mon Jul 01 00:00:00 CDT 1991夏令时 1991-07-01 00:00:00,再序列化转为 CST 时区的字符串时变为 1991-06-30 23:00:00