最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis?獲取更新(update)記錄的id之<selectKey>用法說明

 更新時(shí)間:2022年05月20日 15:04:33   作者:雙斜杠少年  
這篇文章主要介紹了mybatis?獲取更新(update)記錄的id之<selectKey>用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

獲取更新(update)記錄的id之<selectKey>

問題

用mybatis update 記錄,更新過后想要更新記錄的id 怎么辦?

平常我門都是更新數(shù)據(jù),用更新的條件再查詢一次,得到更新的記錄。這樣我門就進(jìn)行了兩次數(shù)據(jù)庫操作,鏈接了兩次數(shù)據(jù)庫。增加了接口的處理事件,因?yàn)殒溄訑?shù)據(jù)庫是很耗時(shí)的操作。

簡介

其實(shí)可以通過 mybatis 的 selectKey 標(biāo)簽來解決這個(gè)問題。

selectKey 這個(gè)標(biāo)簽大家基本上都用過,比如在插入數(shù)據(jù)的時(shí)候,返回插入數(shù)據(jù)的紀(jì)錄。如:

?<selectKey resultType="int" order="AFTER" keyProperty="id">
? ? ? ? ? ? SELECT LAST_INSERT_ID()
?</selectKey>
insert into ?。。。。此處省略
  • resultType :返回的類型,為簡單類型。
  • order: 在insert into 語句執(zhí)行后執(zhí)行。
  • keyProperty : 語句執(zhí)行結(jié)果的 返回目標(biāo)屬性

SELECT LAST_INSERT_ID() 為查詢主體。

此處用法用法就是當(dāng) insert into 執(zhí)行后 執(zhí)行 selectKey 的內(nèi)容將數(shù)據(jù)庫的最后一個(gè)id 查詢出來映射到傳入數(shù)據(jù)對(duì)像的ID 屬性。

解決 獲取update 紀(jì)錄的id

假設(shè)我門有個(gè) bean 為people

public class People {
private Integer id?
private String name;
private String email;
...
}

現(xiàn)在我門寫一個(gè)更新語句,并將更新的紀(jì)錄的ID 返回出來。mybatis 語句如下:

通過 People 的name 去更新 People 的email,并獲取被更新紀(jì)錄的id。

? ? <update id="updateByUserName" parameterType="com.test.bean.People">
?<selectKey keyProperty='id' resultType='int' order='BEFORE'>
? ? ? ? ? ? SELECT
? ? ? ? ? ? (select id FROM people WHERE
? ? ? ? ? ? ?name = #{name})id
? ? ? ? ? ? from DUAL
? </selectKey>
? ? ? ? UPDATE people SET
? ? ? email=#{email}
? ? ? ? WHERE
? ? ? ?name =#{name}
? </update>

上述代碼就是通過 selectKey 實(shí)現(xiàn)了 通過 People 的name 去更新 People 的email,并獲取被更新紀(jì)錄的id。

詳解

?<selectKey keyProperty='id' resultType='int' order='BEFORE'>

此處的 keyProperty=’id’ 是指將查詢出來的id 映射到傳入updateByUserName 的people 的id 。類型為int

因?yàn)榭赡懿榈絥ame 以后可能會(huì)修改name 所以order=’BEFORE’ 要在執(zhí)行update之前進(jìn)行查詢,并把id返回出來。

SELECT
? ? (select id FROM people WHERE
? ? name = #{name})id
from DUAL?

此 SELECT 就是為了獲取 被更新的 people 的id 外邊包裝一個(gè)虛表查詢是當(dāng) name = #{name} 查詢不到紀(jì)錄時(shí)不會(huì)報(bào)空紀(jì)錄,會(huì)返回 null ,這個(gè)就很關(guān)鍵了。

當(dāng)返回空記錄的時(shí)候 mybatis會(huì)報(bào)錯(cuò),說不能轉(zhuǎn)換成 int 型。

當(dāng)返回null的時(shí)候就會(huì)轉(zhuǎn)換成int 的 0 。不會(huì)報(bào)錯(cuò),代表沒有查到。(是不是很機(jī)智?)

下邊的的更新語句就不說了…

? ?UPDATE people SET
? ? ? email=#{email}
? ? ? ? WHERE
? ? ? ?name =#{name}

<selectKey>標(biāo)簽的含義

MyBatis 標(biāo)簽

這個(gè)標(biāo)簽主要用于Insert數(shù)據(jù)時(shí)不支持主鍵自動(dòng)生成的問題

selectKey keyProperty=”m_Id” order=”AFTER” resultType=”int”>
select LAST_INSERT_ID()
selectKey>

SelectKey需要注意order屬性。像Mysql一類支持自動(dòng)增長類型的數(shù)據(jù)庫中,order需要設(shè)置為after才會(huì)取到正確的值。

像Oracle這樣取序列的情況,需要設(shè)置為before,否則會(huì)報(bào)錯(cuò)

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

相關(guān)文章

  • Spring中@Import的各種用法以及ImportAware接口詳解

    Spring中@Import的各種用法以及ImportAware接口詳解

    這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java實(shí)現(xiàn)從數(shù)據(jù)庫導(dǎo)出大量數(shù)據(jù)記錄并保存到文件的方法

    Java實(shí)現(xiàn)從數(shù)據(jù)庫導(dǎo)出大量數(shù)據(jù)記錄并保存到文件的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)從數(shù)據(jù)庫導(dǎo)出大量數(shù)據(jù)記錄并保存到文件的方法,涉及Java針對(duì)數(shù)據(jù)庫的讀取及文件寫入等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • SpringBoot+隨機(jī)鹽值+雙重MD5實(shí)現(xiàn)加密登錄

    SpringBoot+隨機(jī)鹽值+雙重MD5實(shí)現(xiàn)加密登錄

    數(shù)據(jù)加密在很多項(xiàng)目上都可以用到,大部分都會(huì)采用MD5進(jìn)行加密,本文主要介紹了SpringBoot+隨機(jī)鹽值+雙重MD5實(shí)現(xiàn)加密登錄,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java異常學(xué)習(xí)之自定義異常詳解

    Java異常學(xué)習(xí)之自定義異常詳解

    你的程序總有一天會(huì)崩潰掉,在崩潰掉的時(shí)候我們要知道它在哪,為了什么而崩潰掉,數(shù)據(jù)的保存或者丟失情況如何等問題。下面這篇文章主要給大家介紹了關(guān)于Java異常學(xué)習(xí)之自定義異常的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • 詳解java中各類鎖的機(jī)制

    詳解java中各類鎖的機(jī)制

    這篇文章為大家總結(jié)了java中常見的鎖(互斥鎖、讀寫鎖、公平鎖與非公平鎖等)的機(jī)制以及如何使用,文中示例代碼講解詳細(xì),需要的可以學(xué)習(xí)一下
    2021-12-12
  • Java中的HashMap內(nèi)存泄漏問題詳解

    Java中的HashMap內(nèi)存泄漏問題詳解

    這篇文章主要介紹了Java中的HashMap內(nèi)存泄漏問題詳解,WeakHashMap中的key是弱引用,如果再使用之后沒有及時(shí)remove掉這個(gè)key,那么當(dāng)GC時(shí)key就可能會(huì)被回收,導(dǎo)致key對(duì)應(yīng)的value對(duì)象占用的內(nèi)存無法回收進(jìn)而導(dǎo)致內(nèi)存泄漏,需要的朋友可以參考下
    2023-09-09
  • 關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore

    關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore

    這篇文章主要介紹了關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳解JDBC的概念及獲取數(shù)據(jù)庫連接的5種方式

    詳解JDBC的概念及獲取數(shù)據(jù)庫連接的5種方式

    Java?DataBase?Connectivity是將Java與SQL結(jié)合且獨(dú)立于特定的數(shù)據(jù)庫系統(tǒng)的應(yīng)用程序編程接口,一種可用于執(zhí)行SQL語句的JavaAPI。本文主要介紹了JDBC的概念及獲取數(shù)據(jù)庫連接的5種方式,需要的可以參考一下
    2022-09-09
  • 為SpringBoot服務(wù)添加HTTPS證書的方法

    為SpringBoot服務(wù)添加HTTPS證書的方法

    這篇文章主要介紹了為SpringBoot服務(wù)添加HTTPS證書的方法,幫助大家更好的理解和使用springBoot框架,感興趣的朋友可以了解下
    2020-10-10
  • IDEA?下?Gradle?刪除多余無用依賴的處理方法

    IDEA?下?Gradle?刪除多余無用依賴的處理方法

    這篇文章主要介紹了IDEA下Gradle刪除多余無用依賴,使用該插件可以一定程度上幫助我們刪除無用依賴,但是也可能會(huì)多刪除有用的依賴,需要在使用插件自動(dòng)修復(fù)后手動(dòng)檢測項(xiàng)目,驗(yàn)證是否會(huì)出現(xiàn)問題,避免導(dǎo)致上線發(fā)布錯(cuò)誤的負(fù)優(yōu)化
    2022-03-03

最新評(píng)論

宝应县| 平罗县| 屯留县| 个旧市| 汕尾市| 华安县| 宾川县| 且末县| 电白县| 镇江市| 望奎县| 中江县| 绥芬河市| 灵武市| 敖汉旗| 安福县| 巴东县| 门头沟区| 龙胜| 句容市| 扎赉特旗| 平山县| 高平市| 淮滨县| 岳西县| 朔州市| 汕头市| 茂名市| 碌曲县| 迭部县| 新郑市| 集贤县| 张北县| 洛南县| 长寿区| 四会市| 湟中县| 响水县| 辰溪县| 承德市| 土默特左旗|