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

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

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

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

問(wèn)題

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

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

簡(jiǎn)介

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

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

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

SELECT LAST_INSERT_ID() 為查詢主體。

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

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

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

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

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

通過(guò) 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>

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

詳解

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

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

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

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ò),說(shuō)不能轉(zhuǎn)換成 int 型。

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

下邊的的更新語(yǔ)句就不說(shuō)了…

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

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

MyBatis 標(biāo)簽

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

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

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

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

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

相關(guān)文章

  • MyBatis 使用權(quán)威指南

    MyBatis 使用權(quán)威指南

    MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集,本文給大家介紹MyBatis 使用指南,一起看看吧
    2017-03-03
  • Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中Stream使用過(guò)程中的一個(gè)注意事項(xiàng),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Mybatis多參數(shù)及實(shí)體對(duì)象傳遞實(shí)例講解

    Mybatis多參數(shù)及實(shí)體對(duì)象傳遞實(shí)例講解

    在使用Mybatis的時(shí)候,經(jīng)常會(huì)有各種各樣的參數(shù)傳遞,不同類(lèi)型,不同個(gè)數(shù)的參數(shù),下面小編通過(guò)例子給大家講解下Mybatis多參數(shù)及實(shí)體對(duì)象傳遞,一起看看吧
    2016-12-12
  • Java注解Annotaton詳解

    Java注解Annotaton詳解

    Java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制,文中給大家介紹了三種基本的Annotaton,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-05-05
  • Java SpringBoot啟動(dòng)指定profile的8種方式詳解

    Java SpringBoot啟動(dòng)指定profile的8種方式詳解

    這篇文章主要介紹了spring boot 如何指定profile啟動(dòng)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java模擬實(shí)現(xiàn)QQ三方登錄(單點(diǎn)登錄2.0)

    Java模擬實(shí)現(xiàn)QQ三方登錄(單點(diǎn)登錄2.0)

    這篇文章主要為大家詳細(xì)介紹了Java模擬實(shí)現(xiàn)QQ三方登錄,單點(diǎn)登錄2.0,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Java中關(guān)于線程安全的三種解決方式

    Java中關(guān)于線程安全的三種解決方式

    這篇文章主要介紹了Java中關(guān)于線程安全的三種解決方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 關(guān)于Java中的可見(jiàn)性和有序性問(wèn)題

    關(guān)于Java中的可見(jiàn)性和有序性問(wèn)題

    這篇文章主要介紹了關(guān)于Java中的可見(jiàn)性和有序性問(wèn)題,Java在誕生之初就支持多線程,自然也有針對(duì)這三者的技術(shù)方案,今天就學(xué)習(xí)一下Java如何解決其中的可見(jiàn)性和有序性導(dǎo)致的問(wèn)題,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)登錄和注冊(cè)案例

    Java實(shí)現(xiàn)登錄和注冊(cè)案例

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)登錄和注冊(cè)案例,把用戶信息存進(jìn)集合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • java上乘武功入門(mén)--反射

    java上乘武功入門(mén)--反射

    反射是Java的一種機(jī)制,一般也叫做反射機(jī)制,本文會(huì)講反射機(jī)制是什么和怎么使用,喜歡的朋友可以觀看一下,希望能給你帶來(lái)幫助
    2021-07-07

最新評(píng)論