当前位置: 首页 > news >正文

MyBatis-Plus 自动填充功能

MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间更新时间 字段的自动填充,帮助开发者在处理数据时更加高效,减少人为错误。

本文将介绍 MyBatis-Plus 自动填充功能 的概念、实现步骤、场景应用以及如何配置和自定义填充规则。


1. 自动填充的概念

自动填充功能指的是,当执行 插入(INSERT)更新(UPDATE) 操作时,某些字段可以由 MyBatis-Plus 自动赋值,无需开发者手动提供。这些字段通常是一些系统字段,比如:

  • 创建时间:记录实体对象的创建时间。
  • 更新时间:记录实体对象的最后修改时间。

自动填充通过 字段注解 配合 MetaObjectHandler 实现,可以自动为某些字段设置默认值,避免重复的代码逻辑。


2. 实现自动填充的步骤

要实现 MyBatis-Plus 的自动填充功能,通常需要以下几个步骤:

2.1 步骤 1:在实体类中标注自动填充字段

在实体类中,使用 MyBatis-Plus 提供的 @TableField 注解,指定需要自动填充的字段,并设置 fill 属性。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;

import java.time.LocalDateTime;

public class User {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private String name;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    // Getters and Setters
}
  • @TableField(fill = FieldFill.INSERT):表示在插入数据时自动填充字段,如 createTime 字段在插入时自动赋值。
  • @TableField(fill = FieldFill.INSERT_UPDATE):表示在插入和更新时都会自动填充字段,如 updateTime 字段。

2.2 步骤 2:实现 MetaObjectHandler 接口

MyBatis-Plus 通过 MetaObjectHandler 接口来实现字段的自动填充功能。开发者需要实现该接口,并重写 insertFillupdateFill 方法。

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

import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    // 插入时自动填充
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 自动填充创建时间
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 自动填充更新时间
    }

    // 更新时自动填充
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 自动填充更新时间
    }
}

在这个实现中:

  • insertFill:在插入操作时自动填充字段,例如将当前时间赋值给 createTimeupdateTime 字段。
  • updateFill:在更新操作时自动填充字段,通常只会更新 updateTime 字段。

2.3 步骤 3:注册 MetaObjectHandler

MetaObjectHandler 接口的实现类需要通过 @Component 注解标记为 Spring Bean,这样 Spring Boot 会自动扫描并注入到 MyBatis-Plus 中。

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    // 同上
}

3. 自动填充的场景应用(创建时间、更新时间)

3.1 创建时间(createTime

创建时间 字段通常在数据插入时自动填充。它记录了数据创建的时间,通常使用 LocalDateTime 类型存储。

实现示例

在实体类中,我们使用 @TableField(fill = FieldFill.INSERT) 来确保插入数据时自动填充 createTime 字段。

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

MetaObjectHandler 中,我们设置 insertFill 方法自动填充当前时间:

@Override
public void insertFill(MetaObject metaObject) {
    this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}

3.2 更新时间(updateTime

更新时间 字段通常在数据更新时自动填充,记录数据最后一次修改的时间。updateTime 字段需要通过 @TableField(fill = FieldFill.INSERT_UPDATE) 注解来进行配置,使得在插入和更新时都能自动填充。

实现示例

在实体类中,我们使用 @TableField(fill = FieldFill.INSERT_UPDATE) 来确保插入和更新时自动填充 updateTime 字段。

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

MetaObjectHandler 中,我们设置 updateFill 方法自动填充当前时间:

@Override
public void updateFill(MetaObject metaObject) {
    this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}

3.3 自动填充的效果

通过上述配置,在执行插入和更新操作时,MyBatis-Plus 会自动为 createTimeupdateTime 字段填充当前时间,无需开发者显式赋值。

User user = new User();
user.setName("John");
userService.save(user);  // 自动填充 createTime 和 updateTime

4. 配置与自定义填充规则

4.1 配置自动填充字段

在 MyBatis-Plus 中,我们可以通过 @TableField 注解的 fill 属性来指定需要自动填充的字段。当执行插入或更新操作时,Spring 会自动为这些字段填充值。

示例:配置自动填充字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

4.2 自定义填充规则

如果需要自定义填充规则,例如在创建时使用自定义的时间格式或设置特定的字段值,可以在 MetaObjectHandler 中进行实现。

示例:自定义填充规则
@Override
public void insertFill(MetaObject metaObject) {
    this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());  // 自动填充当前时间
    this.strictInsertFill(metaObject, "status", Integer.class, 1);  // 自定义填充规则:status 默认值为 1
}

在此示例中,我们不仅自动填充 createTime 字段,还将 status 字段的默认值设置为 1


5. 总结

  • 自动填充功能 是 MyBatis-Plus 的一项强大特性,能够减少手动设置系统字段的工作,提升开发效率。
  • 通过 @TableField 注解中的 fill 属性,开发者可以轻松配置需要自动填充的字段,如 创建时间更新时间
  • 自定义填充规则 允许开发者在插入和更新时根据需求设置字段的默认值,进一步增强了灵活性。
  • 使用 MetaObjectHandler 接口,开发者可以灵活控制自动填充的字段,在 insertFillupdateFill 方法中定义自动填充规则。

通过 MyBatis-Plus 提供的自动填充功能,开发者可以更加高效地进行数据处理,减少代码冗余,并确保系统字段的一致性和正确性。 🚀

相关文章:

  • 本地部署Deepseek+Cherry Studio
  • 【windows driver】 开发环境简明安装教程
  • Windows 11 下正确安装 Docker Desktop 到 D 盘的完整教程
  • anythingLLM和deepseek4j和milvus组合建立RAG知识库
  • 本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)
  • 【CPP面经】CPP后台开发面试经历
  • mac Homebrew安装、更新失败
  • C语言整体梳理-基础篇-结构体
  • 实战-使用 Playbook 批量部署多台 LAMP 环境
  • Android实现漂亮的波纹动画
  • 【线性代数的理解】 为什么说线性代数研究的是空间变换?旋转矩阵坐标转换矩阵
  • 社交APP如何打造高粘性兴趣社群
  • 泰勒公式详解与应用
  • 学生管理前端
  • element-ui infiniteScroll 组件源码分享
  • C# 基于.NET Framework框架WPF应用程序-MQTTNet库实现MQTT消息订阅发布
  • 基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • SQL命令详解之增删改数据
  • Godot4.3 显示像素风格图片模糊如何设置?
  • 【C++】Points
  • 在网站做博客/网站统计分析工具的主要功能
  • 定制版网站建设详细报价单/网页设计代码大全
  • 怎样做diy家具网站/百度分析
  • 商丘行业网站建设开发公司/微信营销推广
  • 淮南市网站开发的方式/推广策略可以分为哪三种
  • 用ps怎么做网站导航条/网站排名查询站长之家