Java开发中一起MySQL时间戳精度引发的血案( 二 )
如果你面对这个问题,你会怎么修复呢?
我们当时想了三种方案:
将mybatis的Mapper接口中的时间戳参数的类型,从java.util.Date改成java.sql.Date;在传入Mapper接口之前,将传入的时间戳按秒取正,代码如下
在查询之前,将传入的时间戳减1秒;
经过验证,方案1会,java.util.Date转过去的java.sql.Date对象会将日期之后的精度全部丢掉,从而导致查询出更多不必要的数据;方案3是可以的,就是可能会查出多一两条数据;方案2也是可以的,相当于从代码上对mysql-connector-java的特性做了补偿。最终我选择的是方案2。
案例复现
利用homebrew安装MySQL,版本是8.0.15,装好后建一个表,用来存放用户信息,SQL如下:
使用spirngboot + mybatis作为开发框架,定义一个用户实体,代码如下所示:
定义该实体对应的Mapper,代码如下:
推荐阅读
- 宿舍|哈利波特:宿舍龙蛋全攻略,带上你的小伙伴,一起拿走奖励吧
- 魔兽世界|《轨迹》新作明年发布! 法老控将针对NS平台开发游戏
- 手机游戏|CFHD:神秘组织为什么开发生化手雷呢?关键是为了赚更多钱
- edg战队|原神2.4卡池终于曝光,3位新老婆角色一起up,云堇是5星风属性主c角色!
- ag战队|AG不敌XYG,梦泪气到下播,阿泽:首发阵容是大家一起确定的
- faker|SKT的情谊!Faker提到学弟满脸笑意,Bang和Wolf想和学弟一起开黑
- 大话西游|大话西游2这些召唤兽的天生技能是开发组拿来凑数的吗?实际效果完全没用
- 电子竞技|【欣然轻资讯G】《地平线2西部禁域》新老怪兽即将登场 开发者日志
- 许秀|输了还“抱得美人归”?showmaker收女星邀请:回来一起吃个饭吧
- 桌游|48小时里,游戏开发能给这群大学生带来什么?