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 接口来定义填充逻辑:
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
       @Override
       public void insertFill(MetaObject metaObject) {
           this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
       }
    
    
       @Override
       public void updateFill(MetaObject metaObject) {
           // 更新填充逻辑(如果需要)
       }
    }
    
  2. 字段名称不一致

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

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

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

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

快速验证步骤

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

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?