欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

myatisplus的saveOrUpdate的提交總是update問(wèn)題

 更新時(shí)間:2023年11月20日 15:17:31   作者:勤快的小螞蟻  
這篇文章主要介紹了myatisplus的saveOrUpdate的提交總是update問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

背景

很多朋友,想把新增和編輯做在一起。

沒(méi)想到自己遇到坑了,

自己的saveOrUpdate的提交總是update。

控制臺(tái)sql輸出

UPDATE t_course_type  SET course_type_name=?,
create_time=?,
create_user=?,
update_time=?,
update_user=?

報(bào)錯(cuò)

com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:  Prohibition of table update operation

官方文檔

// TableId 注解存在更新記錄,否插入一條記錄
boolean saveOrUpdate(T entity);
// 根據(jù)updateWrapper嘗試更新,否繼續(xù)執(zhí)行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);

分析

發(fā)現(xiàn)上面的sql沒(méi)有where條件。

以為是新增操作,沒(méi)有id,主鍵是自增的,就加了個(gè)判斷

ObjectUtils.isNotEmpty(courseTypeId)。

發(fā)現(xiàn)是updateWrapper的eq方法 不能加condition參數(shù)。

錯(cuò)誤方式

updateWrapper.eq(ObjectUtils.isNotEmpty(courseTypeId), CourseTypeEntity::getCourseTypeId, courseTypeId);

正確方式

去除第一個(gè)condition參數(shù)。保留2個(gè)參數(shù)即可。

updateWrapper.eq(CourseTypeEntity::getCourseTypeId, courseTypeId);

成功案例實(shí)現(xiàn)源碼分享

LambdaUpdateWrapper<CourseTypeEntity> updateWrapper = new LambdaUpdateWrapper<>();
  
        updateWrapper.eq(CourseTypeEntity::getCourseTypeId, courseTypeId);
        
        CourseTypeEntity courseTypeEntity = new CourseTypeEntity();
        if (courseTypeIdNotEmpty) {
            courseTypeEntity.setCourseTypeId(courseTypeId)
                    .setUpdateTime(LocalDateTime.now())
                    .setUpdateUser(username)
                    .setCourseTypeName(courseTypeName)
                    .setCourseCount(courseCount);
        } else {
            courseTypeEntity.setCourseTypeName(courseTypeName)
                    .setCreateTime(LocalDateTime.now())
                    .setCreateUser(username)
                    .setUpdateTime(LocalDateTime.now())
                    .setUpdateUser(username);
        }
        
        boolean saveOrUpdate = this.saveOrUpdate(courseTypeEntity, updateWrapper);

注意

要去了解這個(gè)saveOrUpdate的源碼的處理機(jī)制。

源碼

    default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {
        return this.update(entity, updateWrapper) || this.saveOrUpdate(entity);
    }

因?yàn)樵摲椒J(rèn)是使用實(shí)體對(duì)象的id去匹配,

如果有就更新,

如果沒(méi)有就插入。

對(duì)于主鍵自增的場(chǎng)景,

一般不會(huì)手動(dòng)設(shè)置id,每一次的id都不相同,

所以如果不使用條件選擇器,一定是插入。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java解析xml的四種方法匯總

    Java解析xml的四種方法匯總

    XML在不同的語(yǔ)言里解析方式都是一樣的,只不過(guò)實(shí)現(xiàn)的語(yǔ)法不同而已。java中基本的解析方式有四種,DOM解析、sax解析、JDOM解析和DOM4J解析,下面我們就來(lái)詳細(xì)探討下這四種方式
    2016-05-05
  • 詳解Java動(dòng)態(tài)字節(jié)碼技術(shù)

    詳解Java動(dòng)態(tài)字節(jié)碼技術(shù)

    Java字節(jié)碼增強(qiáng)指的是在Java字節(jié)碼生成之后,對(duì)其進(jìn)行修改,增強(qiáng)其功能,可減少冗余代碼,提高性能等。本文將詳細(xì)介紹Java動(dòng)態(tài)字節(jié)碼技術(shù)。
    2021-05-05
  • JavaFx?Tooltip懸浮提示使用及自定義代碼詳解

    JavaFx?Tooltip懸浮提示使用及自定義代碼詳解

    本篇是基于TornadoFx框架對(duì)Tooltip組件進(jìn)行講解,使用Kotlin語(yǔ)言,和傳統(tǒng)Java使用有所區(qū)別,本章節(jié)包括對(duì)tooltip的樣式定制化以及指定窗口顯示,對(duì)JavaFx?Tooltip懸浮提示使用及自定義相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-12-12
  • 如何使用Java在excel單元格中設(shè)置超鏈接

    如何使用Java在excel單元格中設(shè)置超鏈接

    這篇文章主要介紹了如何使用Java在excel單元格中設(shè)置超鏈接,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java?poi導(dǎo)入純數(shù)字等格式問(wèn)題及解決

    java?poi導(dǎo)入純數(shù)字等格式問(wèn)題及解決

    這篇文章主要介紹了java?poi導(dǎo)入純數(shù)字等格式問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • jmeter中json提取器如何提取多個(gè)參數(shù)值

    jmeter中json提取器如何提取多個(gè)參數(shù)值

    關(guān)于jmeter中的正則表達(dá)式及json提取器可以提取響應(yīng)值,但是實(shí)際可以需要上個(gè)接口的多個(gè)響應(yīng)值,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換功能

    Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換功能

    這篇文章主要介紹了Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • java調(diào)用opencv身份證號(hào)識(shí)別詳解

    java調(diào)用opencv身份證號(hào)識(shí)別詳解

    這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實(shí)現(xiàn)身份證號(hào)的識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 詳解Spring的兩種代理方式:JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理

    詳解Spring的兩種代理方式:JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理

    這篇文章主要介紹了詳解Spring的兩種代理方式:JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 全面解讀Java?NIO(看這篇就夠了)

    全面解讀Java?NIO(看這篇就夠了)

    Java?NIO是Java1.4之后推出來(lái)的一套IO接口,NIO提供了一種完全不同的操作方式,?NIO支持面向緩沖區(qū)的、基于通道的IO操作,這篇文章主要介紹了Java?NIO詳解(看這篇就夠了),需要的朋友可以參考下
    2023-05-05

最新評(píng)論