使用MyBatisPlus操作数据自动填充时间

第一步 配置文件开启权限

yml文件里面进行配置mybatis-plus:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config: #配置全局参数
    db-config:  #配置数据库参数
      id-type: auto #主键自增
      auto-fill: true #自动填充
      logic-delete-value: 1 #逻辑删除值
      logic-not-delete-value: 0 #逻辑未删除值

  第二步 实体类上添加注解配置

    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

第三步 配置和自动填充时间的拦截器

package com.power.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {//实现MetaObjectHandler
    //配置自动填充 拦截器
    //insert操作时填充方法
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("Createdtime", new Date(), metaObject);   //创建时间
        this.setFieldValByName("Updatedtime", new Date(), metaObject);   //更新时间
    }
    //update操作时填充方法
    @Override
    public void updateFill(MetaObject metaObject) { //填充 更新时间
        this.setFieldValByName("Updatedtime", new Date(), metaObject);

    }
}

配置好这三步在使用mybatis进行新增和修改的时候不需要手动设置对象的时间了

### MyBatisPlus 自动填充时间失败的原因分析与解决方案 #### 一、常见原因 1. **实体类未配置`@TableField`注解** 如果实体类中的字段缺少`@TableField(fill = FieldFill.INSERT_UPDATE)`这样的注解,则可能导致自动填充功能无法正常工作[^1]。 2. **全局配置缺失或错误** 需要在`application.yml`文件中正确配置MyBatis-Plus的相关参数,例如数据库类型和策略设置。如果全局配置有误或者遗漏某些必要项,也可能导致自动填充失效[^4]。 3. **处理器未注册** 自定义的元对象处理器(MetaObjectHandler)如果没有被正确注入到Spring容器中,那么即使实现了接口并重写了方法也不会生效[^2]。 4. **字段类型不匹配** 数据库表中的字段类型与Java实体类属性类型如果不一致,比如MySQL中的`update_time`是字符串类型的VARCHAR而程序里却是Date型变量,这会造成赋值冲突从而引发异常[^3]。 5. **版本兼容性问题** 使用不同版本之间可能存在API变更或者其他差异之处影响正常使用效果;因此建议开发者确认所依赖jar包是否最新稳定版以及相互间是否存在已知矛盾点。 #### 二、具体解决办法 ##### 方法一:检查并完善实体类定义 确保每一个需要参与自动填充操作的目标列都加上了合适的标签说明其行为模式。 ```java import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; public class User { @TableField(fill=FieldFill.INSERT) private Date createTime; @TableField(fill=FieldFill.UPDATE) private Date updateTime; } ``` ##### 方法二:验证YAML配置准确性 以下是推荐的一个基础示例供参考调整: ```yaml mybatis-plus: global-config: db-config: id-type: auto # 主键生成方式 logic-delete-value: 1 # 逻辑删除标记值 logic-not-delete-value: 0 # 正常状态对应数值 ``` ##### 方法三:实现自定义 MetaObjectHandler 并完成 Bean 注册 编写继承抽象基类AbstractMetaObjectHandler 的子类,并覆盖相应的方法体内容。 ```java @Component public class MyMetaObjectHandler extends AbstractMetaObjectHandler { @Override public void insertFill(MetaObject metaObject){ this.strictInsertFill(metaObject,"createTime",LocalDateTime.class, LocalDateTime.now()); this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject){ this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class, LocalDateTime.now()); } } ``` 注意这里通过 `strict*Fill()` 函数指定精确的数据源映射关系以便更安全可靠地执行替换动作。 ##### 方法四:修正数据模型结构一致性 当遇到因类型转换引起的报错情况时,应该优先考虑统一双方表达形式而非单纯依靠框架内部机制去适配外部环境变化带来的挑战。对于上述提到的时间戳存储为例,最好能将后台服务端返回的结果格式化成前端可接受的标准样式再传递出去展示给用户查看即可满足需求。 --- ### 总结 综上所述,针对MyBatisPlus 时间字段自动填充失败这一现象可以从多个角度出发排查定位根本诱因所在位置进而采取针对性措施加以修复优化性能表现达到预期目标水平之上运行效率更高用户体验更好!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值