MyBatis-Plus 自动赋值实体字段最佳实践指南

2025-07-24 20:50

本文主要是介绍MyBatis-Plus 自动赋值实体字段最佳实践指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与...

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具包,提供了很多便利的功能,其中 自动赋值实体字段 是开发中非常常见的需求。本文将深入探讨 MyBatis-Plus 的自动赋值机制,并通过详细的 Java 代码和表格进行对比和解释,帮助大家更好地掌握这个功能。

1. MyBatis-Plus 自动赋值概述

MyBatis-Plus 提供了一种便捷的方式来自动填充实体对象中的字段,尤其是在处理一些常见的数据库操作时(如创建时间、更新时间等)。在进行数据插入、更新操作时,常常需要对某些字段进行自动填充,减少手动赋值的工作量,提升开发效率。

1.1 适用场景

  • 时间戳自动填充:如 createTimeupdateTime 等字段通常需要在插入或更新时自动填充为当前时间。
  • 用户信息填充:如 createByupdateBy 等字段通常需要在操作时自动填充当前操作用户。
  • 逻辑删除标识www.chinasem.cn如 isDeleted 字段,插入时自动填充 0,更新时填充 1 表示android删除。

1.2 自动填充的原理

MyBatis-Plus 的自动赋值字段主要通过 @TableField 注解与填充策略来实现。它通过配置特定的填充规则,使得在执行插入、更新操作时,某些字段能够自动填充。

1.3 填充策略

MyBatis-Plus 提供了四种常见的填充策略:

  • FieldFill.INSERT:在插入时填充
  • FieldFill.UPDATE:在更新时填充
  • FieldFill.INSERT_UPDATE:在插入和更新时都填充
  • FieldFill.DEFAULT:不指定填充策略,使用默认填充规则

2. 关键注解与配置

MyBatis-Plus 提供了两个关键注解用于自动赋值字段的配置:@TableField@TableId

2.1@TableField注解

@TableField 注解用于标识实体类中的字段,配合 fill 属性来定义自动填充的行为。通过 fill 属性,我们可以为字段指定填充策略。

示例:

@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
  • createTime 字段在插入时自动填充。
  • updateTime 字段在插入和更新时自动填充。

2.2@TableId注解

@TableId 注解用于指定实体类中的主键字段。在某些情况下,我们也可能需要对主键字段进行自动赋值。通常来说,MyBatis-Plus 会自动处理主键生成策略(如自增、UUID 等)。

示例:

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

该配置表示主键 id 使用数据库自增。

2.3 配置填充策略

为了实现自动赋值,我们需要配置填充策略。填充策略可以在 Mapper 层通过实现 MetaObjectHandler 接口来指定。

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 插入时填充 createTime
        this.strictInsertFill(metaObject, "createBy", String.class, "admin");   // 插入时填充 createBy
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 更新时填充 updateTime
        this.strictUpdateFill(metaObject, "updateBy", String.class, "admin");   // 更新时填充 updateBy
    }
}

MetaObjectHandler 是 MyBatis-Plus 提供的接口,用于处理自动填充的逻辑。通过实现该接口,我们可以在插入和更新时自定义字段的自动填充行为。

3. 使用实例python与代码解析

3.1 实体类示例

假设我们有一个 User 实体类,包含 id, username, createTime, updateTime 等字段,并希望在进行插入和更新时自动填充时间戳。

@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

3.2 Mapper 示例

在 Mapper 接口中,我们可以直接使用 MyBatis-Plus 提供的 updateById, insert 等方法。

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 自定义的数据库操作方法
}

3.3 自动赋值操作示例

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public void addUser(User user) {
        // 自动填充的字段会被 MyBatis-Plus 处理
        userMapper.insert(user);
    }
    public void updateUser(User user) {
        // 自动填充的字段会被 MyBatis-Plus 处理
        userMapper.updateById(user);
    }
}

在上述示例中,createTimeupdateTime 会在插入和更新时自动填充。

4. 表格对比:不同填充策略行为

字段类型FieldFill.INSERTFieldFill.UPDwww.chinasem.cnATEFieldFill.INSERT_UPDATEFieldFill.DEFAULT
createTime仅在插入时填充不会填充会在插入和更新时填充根据默认策略,通常是 INSERT
updateTime不会填充仅在更新时填充会在插入和更新时填充根据默认策略,通常是 INSERT

通过表格,我们可以看到不同填充策略的行为区别。开发者可以根据业务需求来选择合适的填充策略。

5. 总结与最佳实践

5.1 自动赋值的优势

  • 减少重复代码:自动填充时间戳和用户信息等常见字段,避免手动赋值。
  • 提高代码可读性:通过注解和配置清晰表达字段填充逻辑,简化代码。
  • 保证数据一致性:自动填充保证了字段值的一致性,减少人为错误。

5.2 常见问题与解决方案

  • 填充不生效:请确保已正确配置 MetaObjectHandler,并且 @TableField(fill = FieldFill.xxx) 注解已加在正确的字段上。
  • 更新时覆盖:修改配置类MyMetaObjjsectHandler
  • strictUpdateFill(): 保留更新实体对象的原有值,只在字段为空时才会进行填充。
  • setFieldValByName(): 会强制覆盖实体对象字段的原有值,不论字段是否为空。
  • 主键策略问题:在使用 @TableId 注解时,需要明确指定主键生成策略(如 IdType.AUTO)。

5.3 最佳实践

  • 使用 MetaObjectHandler 配置全局的字段填充策略。
  • 避免在业务层手动设置常规字段(如时间戳、用户信息),通过自动填充来保证一致性。
  • 尽量避免过多的手动填充,自动赋值机制能有效减少错误和重复代码。

通过本文的学习,相信你对 MyBatis-Plus 自动赋值实体字段的使用有了更深入的理解。合理利用 MyBatis-Plus 提供的自动填充功能,可以大大提高开发效率并降低出错的概率。希望你在实际开发中能够得心应手地运用这些技巧

到此这篇关于MyBatis-Plus 自动赋值实体字段的文章就介绍到这了,更多相关mybatisplus自动赋值内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MyBatis-Plus 自动赋值实体字段最佳实践指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155475

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS