mybatisPlus新增时其他字段的值和id保持一致的几种方法
目录
- 方案一:使用 MyBATis-Plus 的自动填充功能
- 方案二:在插入后更新 sp_id_path
- 方案三:使用数据库触发器(推荐)
- 实体类配置
要实现新增时 sp_id_path
自动与 id
保持一致,需要在实体类和插入逻辑中做相应处理。MyBatis-Plus 提供了几种方式来实现这一需求:
方案一:使用 MyBatis-P编程客栈lus 的自动填充功能
这是最优雅的解决方案,通过实现 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 = (DsteSp编程ConfigNew) 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); javascript // 2. 获取生成的 id Long id = conpythonfig.getId(); // 3. 更新 sp_id_path 为 id 值 DsteSpConfigNew updateEntity = new DsteSpConfigNew(); updateEntity.setId(id); updwww.devze.comateEntity.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保持一致内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论