mybatisPlus新增時其他字段的值和id保持一致的幾種方法
要實現(xiàn)新增時 sp_id_path
自動與 id
保持一致,需要在實體類和插入邏輯中做相應(yīng)處理。MyBatis-Plus 提供了幾種方式來實現(xiàn)這一需求:
方案一:使用 MyBatis-Plus 的自動填充功能
這是最優(yōu)雅的解決方案,通過實現(xiàn) MetaObjectHandler
接口,在插入前自動設(shè)置 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) { // 獲取當(dāng)前實體對象 Object entity = metaObject.getOriginalObject(); // 只處理 DsteSpConfigNew 實體 if (entity instanceof DsteSpConfigNew) { DsteSpConfigNew config = (DsteSpConfigNew) entity; // 若 sp_id_path 未手動設(shè)置,則在插入前設(shè)置為 id 值 if (config.getSpIdPath() == null) { // 注意:此處 id 可能還未生成,需要特殊處理 // 下面會提供具體實現(xiàn)方式 } } } @Override public void updateFill(MetaObject metaObject) { // 更新填充邏輯 } }
方案二:在插入后更新 sp_id_path
由于 id
是自增主鍵,插入前無法獲取,可分兩步實現(xiàn):
- 先插入記錄,獲取生成的
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); } }
方案三:使用數(shù)據(jù)庫觸發(fā)器(推薦)
數(shù)據(jù)庫層面的觸發(fā)器可以更可靠地保證 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 代碼,完全由數(shù)據(jù)庫自動處理,但需要注意觸發(fā)器可能帶來的性能影響。
實體類配置
確保實體類中包含這兩個字段,并使用正確的注解:
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; }
到此這篇關(guān)于mybatisPlus新增時其他字段的值和id保持一致的幾種方法的文章就介紹到這了,更多相關(guān)mybatisPlus新增值和id保持一致內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot反爬蟲組件kk-anti-reptile的使用方法
這篇文章主要介紹了springboot反爬蟲組件kk-anti-reptile的使用方法,幫助大家更好的利用spring boot反爬蟲,保護(hù)網(wǎng)站安全,感興趣的朋友可以了解下2021-01-01Springboot web項目打包實現(xiàn)過程解析
這篇文章主要介紹了Springboot web項目打包實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案
這篇文章主要介紹了Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07