ZBLOG

@Data @TableName("order_item") public class OrderItem { @TableId(type = IdType.AUTO) private Long id; private Long orderId; // 订单ID private Long productId; // 商品ID private String productName; // 商品名称 private St...

根据您提供的代码,createTime 字段的自动填充不生效可能有以下几个原因:

常见问题排查

  1. 未实现 MetaObjectHandler

    • MyBatis-Plus 需要实现 MetaObjectHandler 接口来定义填充逻辑:
    1. @Component
    2. public class MyMetaObjectHandler implements MetaObjectHandler {
    3. @Override
    4. public void insertFill(MetaObject metaObject) {
    5. this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
    6. }
    7. @Override
    8. public void updateFill(MetaObject metaObject) {
    9. // 更新填充逻辑(如果需要)
    10. }
    11. }
  2. 字段名称不一致

    • 检查 @TableField(fill = FieldFill.INSERT) 中的字段名是否与数据库列名完全一致(注意大小写和下划线转换)。
  3. 缺少插件配置 确保在 Spring Boot 配置中启用了 MyBatis-Plus 的自动填充功能:

    1. mybatis-plus:
    2. global-config:
    3. db-config:
    4. logic-not-delete-field: delFlag # 如果有逻辑删除字段
    5. configuration:
    6. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 可选,开启SQL日志调试
  4. 事务或异常干扰

    • 如果插入操作在事务中回滚,或者方法被 try-catch 包裹且未重新抛出异常,可能导致填充失败。
  5. LocalDateTime 支持问题 确保项目中已正确引入对 Java 8 时间类的支持(如 JDBC URL 添加参数):

    1. jdbc:mysql://...?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8

快速验证步骤

  1. 检查 SQL 日志
    开启 MyBatis-Plus SQL 日志,观察插入语句是否包含 create_time 字段的值。

  2. 简化测试
    创建一个最小化的单元测试,排除其他业务逻辑干扰:

    1. @Test
    2. public void testInsert() {
    3. OrderItem item = new OrderItem();
    4. item.setProductName("Test");
    5. orderItemMapper.insert(item); // 检查生成的 createTime
    6. }

如果仍不生效,建议提供更多上下文信息(如完整的 Mapper、Service 代码和 SQL日志),我可以进一步帮您分析。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23424

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?