mybatisPlus新增時其他字段的值和id保持一致的幾種方法
要實(shí)現(xiàn)新增時 sp_id_path 自動與 id 保持一致,需要在實(shí)體類和插入邏輯中做相應(yīng)處理。MyBatis-Plus 提供了幾種方式來實(shí)現(xiàn)這一需求:
方案一:使用 MyBatis-Plus 的自動填充功能
這是最優(yōu)雅的解決方案,通過實(shí)現(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)前實(shí)體對象
Object entity = metaObject.getOriginalObject();
// 只處理 DsteSpConfigNew 實(shí)體
if (entity instanceof DsteSpConfigNew) {
DsteSpConfigNew config = (DsteSpConfigNew) entity;
// 若 sp_id_path 未手動設(shè)置,則在插入前設(shè)置為 id 值
if (config.getSpIdPath() == null) {
// 注意:此處 id 可能還未生成,需要特殊處理
// 下面會提供具體實(shí)現(xiàn)方式
}
}
}
@Override
public void updateFill(MetaObject metaObject) {
// 更新填充邏輯
}
}
方案二:在插入后更新 sp_id_path
由于 id 是自增主鍵,插入前無法獲取,可分兩步實(shí)現(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ā)器可能帶來的性能影響。
實(shí)體類配置
確保實(shí)體類中包含這兩個字段,并使用正確的注解:
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-01
Springboot web項(xiàng)目打包實(shí)現(xiàn)過程解析
這篇文章主要介紹了Springboot web項(xiàng)目打包實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
Java實(shí)現(xiàn)合并word文檔的示例代碼
在做項(xiàng)目中,經(jīng)常會遇到一種情況,需要將一個小word文檔的內(nèi)容插入到一個大word(主文檔)中。本文就為大家準(zhǔn)備了Java實(shí)現(xiàn)合并word文檔的方法,需要的可以參考一下2022-08-08
快速搭建一個SpringBoot項(xiàng)目(純小白搭建教程)
本文主要介紹了快速搭建一個SpringBoot項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
java實(shí)現(xiàn)簡易外賣訂餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡易外賣訂餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案
這篇文章主要介紹了Springboot的spring-boot-maven-plugin導(dǎo)入失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

