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的Synchronized锁原理和优化

    浅谈Java的Synchronized锁原理和优化

    这篇文章主要介绍了Java的Synchronized锁原理和优化,synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果,需要的朋友可以参考下
    2023-05-05
  • springcloud检索中间件 ElasticSearch 分布式场景的使用

    springcloud检索中间件 ElasticSearch 分布式场景的使用

    单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题,本文重点给大家介绍springcloud检索中间件 ElasticSearch 分布式场景的运用,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • java如何根据时间戳生成有序ID

    java如何根据时间戳生成有序ID

    这篇文章主要介绍了java如何根据时间戳生成有序ID问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    java随机产生验证码,可以随机生成数字、大写字母、小写字母。还可以随机生成文字字体、及大小。在图片上面可能字体都不不同、大小不等
    2013-05-05
  • Java实现常见排序算法的优化

    Java实现常见排序算法的优化

    今天给大家带来的是关于Java的相关知识,文章围绕着Java实现常见排序算法的优化展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-01-01
  • springboot整合tkmybatis方式以及使用过程

    springboot整合tkmybatis方式以及使用过程

    这段文章主要介绍了tkmybatis框架如何解决mybatis中每操作单表需手写xml文件的问题,并详细解释了框架配置、注解使用及常用Mapper方法的使用说明,特别强调了lombok框架的引用以简化代码
    2026-06-06
  • Java多线程join方法实例代码

    Java多线程join方法实例代码

    这篇文章主要介绍了Java多线程join方法实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 浅谈一下Spring的核心基础IOC与DI

    浅谈一下Spring的核心基础IOC与DI

    这篇文章主要介绍了Spring的核心基础IOC与DI的详细用法,spring技术是现在企业开发中几乎必备的技术选型,那么学好spring就很重要,本篇着重讲解spring的核心机制,IOD与DI,一起来看看吧
    2023-03-03
  • 使用idea启动DataX的方法示例

    使用idea启动DataX的方法示例

    这篇文章主要介绍了使用idea启动DataX的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • SpringBoot中整合消息服务组件的方法

    SpringBoot中整合消息服务组件的方法

    本文介绍了消息服务组件的基本概念,以及如何在SpringBoot中整合常见的消息服务组件,如ActiveMQ、RabbitMQ和Kafka,我们探讨整合消息服务组件在实际应用场景中的优势,感兴趣的朋友跟随小编一起看看吧
    2023-07-07

最新评论