Mybatis配置问题(Type handler was null)
1、Type handler was null这个问题可能是因为你的 User 类中 createdAt 字段的类型是 java.security.Timestamp,但 MyBatis 默认不支持这种非标准类型。
通常应该使用 java.util.Date 或 java.sql.Timestamp。
2、错误:Preparing: update `users` set username = ?, password = ?, email = ?, role = ?, school_id = ?, created_at = ? where user_id = ?
==> Parameters: 王五(String), 11113(String), 11113(String), student(String), 1(Integer), null, 3(Integer)
3、插入的数据:
4、问题:传入了createdAt的值,但在MyBatis处理时,该参数被解析为null,导致数据库字段被更新为null
5、分析原因:
(1)JSON 反序列化失败
Postman 发送的 createdAt 是字符串("2025-03-01 17:38:58"),但后端 User 类中的 createdAt 字段可能是 Date 类型。
若未配置日期格式,Spring Boot 默认的 Jackson 无法将字符串自动转为 Date,导致字段值为 null。
(2)MyBatis 参数传递问题
即使 User 对象中 createdAt 有值,若未正确处理类型映射,MyBatis 可能无法将其转为数据库支持的 TIMESTAMP。
6、解决方案:
(1)在 User 类中配置日期格式
为 createdAt 字段添加 @JsonFormat 注解,指定日期格式:
import com.fasterxml.jackson.annotation.JsonFormat;
public class User {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createdAt; // 或 private Timestamp createdAt;
// 其他字段...
}
(2) Spring Boot 全局配置日期格式(可选)
在 application.yml 中统一配置日期格式
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: Asia/Shanghai
(3)检查 MyBatis 类型处理器
-
确保
User
类中createdAt
类型为java.util.Date
或java.sql.Timestamp
。 -
若使用
java.sql.Timestamp
,无需额外配置;若使用java.util.Date
,MyBatis 默认会处理。