mybatis中java中用什么类型和mysql中的datetime类型比较大小?
我目前用的是java中的string和mysql中的datatime比较类似这种
SELECT x.* FROM my.`user` x where time BETWEEN '2024-02-28 22:35:59' and '2024-02-28 22:36:58'
目前没发现问题,不知道是否完全正确?
mybatis中java中用什么类型和mysql中的datetime类型比较大小?
我目前用的是java中的string和mysql中的datatime比较类似这种
SELECT x.* FROM my.`user` x where time BETWEEN '2024-02-28 22:35:59' and '2024-02-28 22:36:58'
目前没发现问题,不知道是否完全正确?
在 MyBatis 中,当你需要在 Java 代码中与 MySQL 的 DATETIME 类型进行比较时,你应该使用 java.util.Date
类型。这是因为 java.util.Date
对象可以表示任何时间点,包括年、月、日、小时、分钟和秒,这与 MySQL 的 DATETIME 类型是兼容的。
在你的例子中,使用字符串来与 DATETIME 进行比较可能会引发问题,因为字符串的比较是按字典顺序进行的,而不是按时间顺序。例如,字符串 '2024-02-28 22:35:59' 会被认为是在 '2024-02-28 22:36:58' 之前,因为在字典顺序中 '22:35:59' 在 '22:36:58' 之前。
因此,你应该使用 java.util.Date
或其子类(如 java.sql.Date
和 java.sql.Timestamp
)来与 MySQL 的 DATETIME 类型进行比较。下面是一个示例查询:
SELECT x.* FROM my.user x WHERE x.time BETWEEN ? AND ?
在 MyBatis 的 Java 代码中,你可以这样传递参数:
Date startDate = new Date(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS));
Date endDate = new Date(System.currentTimeMillis());
// 在 MyBatis 的查询中
sqlSession.selectList("com.example.MyMapper.selectByTimeRange", startDate, endDate);
在这个例子中,startDate
和 endDate
是 java.util.Date
对象,它们分别表示一个小时之前和现在的时间。然后,这些日期被传递给 MyBatis 的查询,MyBatis 将自动将这些日期转换为 MySQL 可以理解的格式。
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
看你mybatis的xml里parameterType是什么,是java.util.Date的话就传Date,是java.lang.String的话就传String,两种应该都可以,只是要注意像‘2024-02-28 22:35:59’这种时间字符串的格式不要出错