查詢更新用法
今天看到mybatis里面有個update更新語句,看到使用了selectKey,一時沒搞懂有什么作用。查閱此作用,才發現這個用法真的很不錯,再此記錄下。
sql 查詢更新寫法
- 更新數據
- 查詢更新數據
注意:這是2條sql,如果在項目里需要連接2次數據庫
mybatis 更新查詢寫法
<update id="update" parameterType="Object" >
<selectKey keyProperty='id' resultType='int' order='BEFORE'>
SELECT
(select id FROM a WHERE
id = #{id})id
from DUAL
</selectKey>
UPDATE a
SET a.a= #{A},
a.b= #{B}
WHERE id = #{id}
</update>
解析:
<selectKey keyProperty='id' resultType='int' order='BEFORE'>
此處的 keyProperty=’id’ 是指將查詢出來的id 映射到傳入update 的Object 的id 。類型為int
SELECT
(select id FROM a WHERE
id = #{id})id
from DUAL
此 SELECT 就是為了獲取 被更新的 Object 的id 外邊包裝一個虛表查詢是當 id = #{id} 查詢不到紀錄時不會報空紀錄,會返回 null ,這個就很關鍵了。
當返回空記錄的時候 mybatis會報錯,說不能轉換成 int 型。
當返回null的時候就會轉換成int 的 0 。不會報錯,代表沒有查到。
優化點:
- 減少連接數據庫次數。
- 簡單邏輯可以不使用spring事務,達到預期目的。