更新時間:2021-07-06 16:13:04 來源:動力節點 瀏覽3351次
用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屬性。
假設我門有個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}
以上就是動力節點小編介紹的"MyBatis更新獲取update記錄",希望對大家有幫助,想了解更多可查看Mybatis基礎教程,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習