久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

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

這篇文章主要介紹了mybatis?獲取更新(update)記錄的id之selectKey用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

問題

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

平常我門都是更新數據,用更新的條件再查詢一次,得到更新的記錄。這樣我門就進行了兩次數據庫操作,鏈接了兩次數據庫。增加了接口的處理事件,因為鏈接數據庫是很耗時的操作。

簡介

其實可以通過 mybatis 的 selectKey 標簽來解決這個問題。

selectKey 這個標簽大家基本上都用過,比如在插入數據的時候,返回插入數據的紀錄。如:

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

SELECT LAST_INSERT_ID() 為查詢主體。

此處用法用法就是當 insert into 執行后 執行 selectKey 的內容將數據庫的最后一個id 查詢出來映射到傳入數據對像的ID 屬性。

解決 獲取update 紀錄的id

假設我門有個 bean 為people

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

現在我門寫一個更新語句,并將更新的紀錄的ID 返回出來。mybatis 語句如下:

通過 People 的name 去更新 People 的email,并獲取被更新紀錄的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 實現了 通過 People 的name 去更新 People 的email,并獲取被更新紀錄的id。

詳解

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

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

因為可能查到name 以后可能會修改name 所以order=’BEFORE’ 要在執行update之前進行查詢,并把id返回出來。

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

此 SELECT 就是為了獲取 被更新的 people 的id 外邊包裝一個虛表查詢是當 name = #{name} 查詢不到紀錄時不會報空紀錄,會返回 null ,這個就很關鍵了。

當返回空記錄的時候 mybatis會報錯,說不能轉換成 int 型。

當返回null的時候就會轉換成int 的 0 。不會報錯,代表沒有查到。(是不是很機智?)

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

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

<selectKey>標簽的含義

MyBatis 標簽

這個標簽主要用于Insert數據時不支持主鍵自動生成的問題

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

SelectKey需要注意order屬性。像Mysql一類支持自動增長類型的數據庫中,order需要設置為after才會取到正確的值。

像Oracle這樣取序列的情況,需要設置為before,否則會報錯

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持html5模板網。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: 97色综合 | 亚洲第一在线 | 99久久精品国产一区二区三区 | 欧美精品一区二区三区在线四季 | 午夜a区 | 国产精品久久久久一区二区三区 | 水蜜桃久久夜色精品一区 | 日日骑 | 在线视频一区二区三区 | 国产美女久久久 | 黄网站在线观看 | 成人小视频在线观看 | 久久一区精品 | 日韩欧美在线一区 | 精品国产一区久久 | 婷婷久久五月天 | 欧美综合一区二区三区 | 久产久精国产品 | va精品| 色视频网站| www.日韩高清| 日本在线一二 | 日韩成人在线播放 | 日本久久网 | 久久精品视频免费观看 | 国产a级毛毛片 | 午夜影院在线观看视频 | 亚洲精品中文字幕在线观看 | 国产精品日韩欧美一区二区 | 欧美区在线观看 | 天天操天天拍 | 精品国产欧美日韩不卡在线观看 | 国产亚洲精品一区二区三区 | 免费精品 | 久久成人一区 | 久久久久久久久久影视 | 成人无遮挡毛片免费看 | 国产亚洲精品精品国产亚洲综合 | 美女天天干 | 欧美一级二级三级 | 国产精品久久久久久影视 |