<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
假設我們這裡有一個 Student 表,結構如下
sid | name | age |
---|---|---|
101 | Jone | 18 |
102 | Jack | 20 |
103 | Tom | 28 |
其中主鍵 sid 是自增的,那麼我們插入資料時就不用插入 sid,它會生成一個自增的 sid。
這裡有一個問題,我們執行插入語句之後,並不能獲取到生成的 sid。
StudentDao 介面中的 insert 方法
boolean insertStudent(Student student);
StudentDao.xml 中的 insert 標籤
<insert id="insertStudent" parameterType="Student"> insert into student(name, age) VALUES (#{name} , #{age}) </insert>
單元測試類中的方法
@Test public void insertUser() { Student student = new Student(0,"xxx", 28); boolean flag = studentDao.insertStudent(student); System.out.println(flag); System.out.println(student); }
執行後的結果
這裡並不能獲取到生成的 sid,如果要獲取這個 sid,還要根據 name 來查詢資料庫,而且 name 也需要是 unique 唯一性的。
那麼,有沒有辦法讓我們能夠執行插入語句後,直接獲取到生成的 sid 呢,當然是有的。
修改 StudentDao.xml 中的 insert 標籤,設定 useGeneratedKeys 和 keyProperty
<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="sid"> insert into student(name, age) VALUES (#{name} , #{age}) </insert>
說明:
1、useGeneratedKeys=“true” 表示給主鍵設定自增長。
2、keyProperty=“sid” 表示將自增長後的 Id 賦值給實體類中的 sid 欄位。
執行結果:成功返回了主鍵 sid
修改 StudentDao.xml 中的 insert 標籤,在 insert 標籤中編寫 selectKey 標籤
<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="sid"> insert into student(name, age) VALUES (#{name} , #{age}) </insert>
說明:
1、< insert> 標籤中沒有 resultType 屬性,但是 < selectKey> 標籤是有的。
2、order=“AFTER” 表示先執行插入語句,之後再執行查詢語句。
3、keyProperty=“sid” 表示將自增長後的 Id 賦值給實體類中的 sid 欄位。
4、SELECT LAST_INSERT_ID() 表示 MySQL 語法中查詢出剛剛插入的記錄自增長 Id。
執行結果:成功返回了主鍵 sid
這種方法需要在一定條件下才能使用,就是 name 需要是 unique,不可重複的。
這樣才能在插入後,根據 name 來查詢出主鍵 sid。
同樣是修改 StudentDao.xml 中的 insert 標籤,在 insert 標籤中編寫 selectKey 標籤
<insert id="insertStudent" parameterType="Student"> insert into student(name, age) VALUES (#{name} , #{age}) <selectKey keyProperty="sid" order="AFTER" resultType="int"> select sid from student where name = #{name} </selectKey> </insert>
原理上面也講了,就是在執行插入語句之後,再執行查詢語句,將 sid 查出來。
不過我這裡 name 並未設定 unique,所以不在這裡進行測試,有興趣可以自行測試。
補充知識點:
mapper.java
/** * 新增部門 * @param department * @return */ Integer insertDep(Department department);
xml
<insert id="insertDep" parameterType="com.example.pojo.entity.Department"> <selectKey keyProperty="departmentId" order="AFTER" resultType="java.lang.Integer "> select LAST_INSERT_ID() </selectKey> insert into sys_department(name,parentId,enabled,isParent) VALUES(#{name},#{parentId},1,0) </insert>
其中:
selectKey標籤:將插入到資料庫的某條記錄的主鍵,返回到指定物件(user)對應屬性中。
keyProperty: 指定返回的主鍵,儲存在物件中(user)的哪個屬性
order:相對於insert語句,selectKey標籤中的sql的執行順序。由於mysql的自增原理,執行完insert語句之後才將主鍵生成,所以這裡selectKey的執行順序為after。
resultType: 返回的主鍵對應的JAVA型別
LAST_INSERT_ID(): 是mysql的函數,返回auto_increment自增列新記錄id值。
使用:
useGeneratedKeys="true" keyProperty="departmentId"
<insert id="insertDep" parameterType="com.example.pojo.entity.Department" useGeneratedKeys="true" keyProperty="departmentId"> insert into sys_department(departmentId,name,parentId,enabled,isParent) VALUES(uuid(),#{name},#{parentId},1,0) </insert>
到此這篇關於mybatis中Insert語句如何返回插入的主鍵的文章就介紹到這了,更多相關mybatis Insert返回插入的主鍵內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援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