Mybatis insert方法主鍵回填和自定義操作
在數(shù)據(jù)庫(kù)插入的時(shí)候,有很多屬性需要我們自己處理,如主鍵自增字段。
MYSQL中主鍵根據(jù)一定規(guī)則生成后,需要我們?cè)诓迦牒笕ブ鲃?dòng)獲取,以便后面的操作,Mybatis為我們提供了處理的方法。
主鍵回填
keyProperty
:指定哪個(gè)字段是主鍵useGeneratedKeys
:這個(gè)主鍵是否使用數(shù)據(jù)庫(kù)內(nèi)置生成策略
我們可以在XML文件中進(jìn)行如下配置:
<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keProperty="id"> insert into t_user(user_name,age) values (#${userName},#{age}) </insert>
這樣我們傳入的user對(duì)象無需設(shè)置id字段,Mybatis會(huì)自動(dòng)進(jìn)行設(shè)置處理,插入成功后id字段會(huì)回填到user對(duì)象中。
使用自定義規(guī)則生成主鍵
實(shí)際工作上有時(shí)候主鍵的生成規(guī)則并不是這么簡(jiǎn)單,比如我們?nèi)∠鹴_user的主鍵自增規(guī)則。我們的要求是:
如果t_user表沒有數(shù)據(jù),我們也要設(shè)置主鍵為1,否則就取主鍵最大值加2,來設(shè)置新的主鍵。
對(duì)此,Mybatis也提供了處理方法,使用SelectKey元素進(jìn)行處理
<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keProperty="id"> <SelectKey keProperty="id" resultType="int" order="BEFORE> select if(max(id) is null, 1, max(id) + 2) as newId from t_user </SelectKey> insert into t_user(user_name,age) values (#${userName},#{age}) </insert>
這樣我們就可以根據(jù)自定義的規(guī)則來處理生成主鍵了。
MyBatis中配置主鍵回填
主鍵回填是一個(gè)很常見的需求,我們經(jīng)常需要添加完數(shù)據(jù)之后,需要獲取剛剛添加的數(shù)據(jù) id,數(shù)據(jù)庫(kù)主鍵回填在 MyBatis 中的簡(jiǎn)單實(shí)現(xiàn)如下:
useGeneratedKeys設(shè)置為true,keyProperty為要回填的屬性名。
當(dāng)插入完成后,這個(gè)對(duì)象的 id 就會(huì)被自動(dòng)賦值,值就是剛剛插入成功的id。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- mybatis-plus指定字段模糊查詢的實(shí)現(xiàn)方法
- springboot?+mybatis?使用PageHelper實(shí)現(xiàn)分頁并帶條件模糊查詢功能
- MyBatis中模糊查詢使用CONCAT('%',#{str},'%')出錯(cuò)的解決
- Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及bug
- mybatis?使用concat?模糊查詢方式
- Java Fluent Mybatis 聚合查詢與apply方法詳解流程篇
- mybatis多層嵌套resultMap及返回自定義參數(shù)詳解
- 詳解MyBatis中主鍵回填的兩種實(shí)現(xiàn)方式
- Mybatis模糊查詢之三種定義參數(shù)方法和聚合查詢、主鍵回填實(shí)現(xiàn)方法
相關(guān)文章
Java設(shè)計(jì)模式中的策略(Strategy)模式解讀
這篇文章主要介紹了Java設(shè)計(jì)模式中的策略(Strategy)模式解讀,對(duì)象的某個(gè)行為,在不同場(chǎng)景有不同實(shí)現(xiàn)方式,可以將這些行為的具體實(shí)現(xiàn)定義為一組策略,每個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)一種策略,在不同場(chǎng)景使用不同的實(shí)現(xiàn),并且可以自由切換策略,需要的朋友可以參考下2023-10-10Java多條件判斷場(chǎng)景中規(guī)則執(zhí)行器的設(shè)計(jì)
近日在公司領(lǐng)到一個(gè)小需求,需要對(duì)之前已有的試用用戶申請(qǐng)規(guī)則進(jìn)行拓展。本文去掉if 判斷,試試用一個(gè)規(guī)則執(zhí)行器來替代它,感興趣的可以了解一下2021-06-06圖解Java?ReentrantLock的條件變量Condition機(jī)制
想必大家都使用過wait()和notify()這兩個(gè)方法把,他們主要用于多線程間的協(xié)同處理。而RenentrantLock也支持這樣條件變量的能力,而且相對(duì)于synchronized?更加強(qiáng)大,能夠支持多個(gè)條件變量,本文就來詳細(xì)說說2022-10-10Java使用BigDecimal進(jìn)行運(yùn)算封裝的實(shí)際案例
今天小編就為大家分享一篇關(guān)于Java使用BigDecimal進(jìn)行運(yùn)算封裝的實(shí)際案例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載(替換過程)
Apache?開源項(xiàng)目?Log4j?的遠(yuǎn)程代碼執(zhí)行漏洞細(xì)節(jié)被公開,由于?Log4j?的廣泛使用,該漏洞一旦被攻擊者利用會(huì)造成嚴(yán)重危害,下面小編給大家?guī)砹薒og4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載,感興趣的朋友一起看看吧2021-12-12SpringBoot超詳細(xì)講解@Enable*注解和@Import
這篇文章主要介紹了SpringBoot?@Enable*注解和@Import,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07分布式鎖redisson實(shí)現(xiàn)原理源碼詳解
這篇文章主要介紹了源碼詳解分布式鎖redisson實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05