MyBatis是否曾支持自动转换java.util.Calendar为数据库timestamp类型
核心结论
你大概率是记混了不同框架的特性,MyBatis官方默认提供的类型处理器从未支持过java.util.Calendar到JDBC TIMESTAMP类型的自动转换。
相关说明
- MyBatis内置的默认时间类类型处理器,仅覆盖
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp以及JDK8之后的java.time包下的JSR-310时间类,官方文档中从来没有出现过支持Calendar自动转换的相关说明。 - 你之前写入2万条数据都正常,是因为对应的写入逻辑没有触发
Calendar类型参数的绑定流程,直到触发了带时间参数的查询逻辑才走到报错的代码分支,不是框架运行中途突然改变了转换规则。 - 如果不想全部替换为
Date类型参数,也可以通过两种方式解决问题:- 在Mapper参数绑定的位置明确指定jdbcType:
#{calendar, jdbcType=TIMESTAMP},即可触发对应的类型适配 - 自定义
Calendar到TIMESTAMP的类型处理器,注册到MyBatis全局配置中即可全局生效
- 在Mapper参数绑定的位置明确指定jdbcType:
- 你关于支持
Calendar转换的记忆很可能来自Spring JDBC的特性,Spring JDBC的JdbcTemplate默认支持Calendar类型的参数转换,同时使用两个框架的开发者很容易记混二者的能力边界。
内容的提问来源于stack exchange,提问作者Morris Town
相关产品推荐
相关产品推荐

