<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
用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 標籤
這個標籤主要用於Insert資料時不支援主鍵自動生成的問題
selectKey keyProperty=」m_Id」 order=」AFTER」 resultType=」int」> select LAST_INSERT_ID() selectKey>
SelectKey需要注意order屬性。像Mysql一類支援自動增長型別的資料庫中,order需要設定為after才會取到正確的值。
像Oracle這樣取序列的情況,需要設定為before,否則會報錯
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45