mybatisPlus新增时其他字段的值和id保持一致的几种方法

 更新时间:2025年05月20日 08:28:41   作者:爱吃土豆的马铃薯  
本文主要介绍了mybatisPlus新增时其他字段的值和id保持一致,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

要实现新增时 sp_id_path 自动与 id 保持一致,需要在实体类和插入逻辑中做相应处理。MyBatis-Plus 提供了几种方式来实现这一需求:

方案一:使用 MyBatis-Plus 的自动填充功能

这是最优雅的解决方案,通过实现 MetaObjectHandler 接口,在插入前自动设置 sp_id_path 的值:

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) {
        // 获取当前实体对象
        Object entity = metaObject.getOriginalObject();
        
        // 只处理 DsteSpConfigNew 实体
        if (entity instanceof DsteSpConfigNew) {
            DsteSpConfigNew config = (DsteSpConfigNew) entity;
            
            // 若 sp_id_path 未手动设置,则在插入前设置为 id 值
            if (config.getSpIdPath() == null) {
                // 注意:此处 id 可能还未生成,需要特殊处理
                // 下面会提供具体实现方式
            }
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新填充逻辑
    }
}

方案二:在插入后更新 sp_id_path

由于 id 是自增主键,插入前无法获取,可分两步实现:

  • 先插入记录,获取生成的 id
  • 立即更新 sp_id_path 为该 id
@Service
public class DsteSpConfigNewService {

    @Autowired
    private DsteSpConfigNewMapper configMapper;

    @Transactional
    public void saveConfig(DsteSpConfigNew config) {
        // 1. 插入记录,此时会自动生成 id
        configMapper.insert(config);
        
        // 2. 获取生成的 id
        Long id = config.getId();
        
        // 3. 更新 sp_id_path 为 id 值
        DsteSpConfigNew updateEntity = new DsteSpConfigNew();
        updateEntity.setId(id);
        updateEntity.setSpIdPath(String.valueOf(id));
        
        configMapper.updateById(updateEntity);
    }
}

方案三:使用数据库触发器(推荐)

数据库层面的触发器可以更可靠地保证 sp_id_path 与 id 的一致性:

DELIMITER $$
CREATE TRIGGER after_dste_sp_config_new_insert
AFTER INSERT ON dste_sp_config_new
FOR EACH ROW
BEGIN
    -- 将新记录的 sp_id_path 更新为 id 值
    UPDATE dste_sp_config_new 
    SET sp_id_path = NEW.id 
    WHERE id = NEW.id;
END$$
DELIMITER ;

这种方式无需修改 Java 代码,完全由数据库自动处理,但需要注意触发器可能带来的性能影响。

实体类配置

确保实体类中包含这两个字段,并使用正确的注解:

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("dste_sp_config_new")
public class DsteSpConfigNew {

    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String spName;
    
    private Long projectId;
    
    private String spIdPath;
    
    private String spNamePath;
    
    private Long parentSpId;
    
    private Integer spStatus;
    
    private LocalDateTime createAt;
    
    private LocalDateTime updateAt;
    
    private LocalDateTime deleteAt;
}

到此这篇关于mybatisPlus新增时其他字段的值和id保持一致的几种方法的文章就介绍到这了,更多相关mybatisPlus新增值和id保持一致内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Java超详细讲解三大特性之一的继承

    Java超详细讲解三大特性之一的继承

    继承就是可以直接使用前辈的属性和方法。自然界如果没有继承,那一切都是处于混沌状态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    2022-05-05
  • springboot反爬虫组件kk-anti-reptile的使用方法

    springboot反爬虫组件kk-anti-reptile的使用方法

    这篇文章主要介绍了springboot反爬虫组件kk-anti-reptile的使用方法,帮助大家更好的利用spring boot反爬虫,保护网站安全,感兴趣的朋友可以了解下
    2021-01-01
  • Springboot web项目打包实现过程解析

    Springboot web项目打包实现过程解析

    这篇文章主要介绍了Springboot web项目打包实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java实现合并word文档的示例代码

    Java实现合并word文档的示例代码

    在做项目中,经常会遇到一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。本文就为大家准备了Java实现合并word文档的方法,需要的可以参考一下
    2022-08-08
  • Java垃圾回收机制的示例详解

    Java垃圾回收机制的示例详解

    本文主要围绕着Java垃圾回收当中的哪些内存需要回收?什么时候回收?如何回收?进行了详细讲解,感兴趣的小伙伴可以学习一下
    2022-04-04
  • 快速搭建一个SpringBoot项目(纯小白搭建教程)

    快速搭建一个SpringBoot项目(纯小白搭建教程)

    本文主要介绍了快速搭建一个SpringBoot项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java字符串split使用方法代码实例

    Java字符串split使用方法代码实例

    这篇文章主要介绍了Java字符串split使用方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 解决Lombok注解不起作用的问题

    解决Lombok注解不起作用的问题

    这篇文章主要介绍了解决Lombok注解不起作用的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java实现简易外卖订餐系统

    java实现简易外卖订餐系统

    这篇文章主要为大家详细介绍了java实现简易外卖订餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Springboot的spring-boot-maven-plugin导入失败的解决方案

    Springboot的spring-boot-maven-plugin导入失败的解决方案

    这篇文章主要介绍了Springboot的spring-boot-maven-plugin导入失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论