詳解mybatis插入數(shù)據(jù)后返回自增主鍵ID的問題
1.場景介紹:
開發(fā)過程中我們經(jīng)常性的會用到許多的中間表,用于數(shù)據(jù)之間的對應和關聯(lián).這個時候我們關聯(lián)最多的就是ID,我們在一張表中插入數(shù)據(jù)后級聯(lián)增加到關聯(lián)表中.我們熟知的mybatis在插入數(shù)據(jù)后返回的是插入成功的條數(shù),那么這個時候我們想要得到相應的這條新增數(shù)據(jù)的ID,該怎么辦呢?
2.插入數(shù)據(jù)返回自增主鍵ID方法(一)
在映射器中配置獲取記錄主鍵值xml映射:
在xml中定義useGeneratedKeys為true,返回主鍵id的值,keyProperty和keyColumn分別代表數(shù)據(jù)庫記錄主鍵字段和java對象成員屬性名
<!-- 插入數(shù)據(jù):返回記錄主鍵id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into stu (name,age) values (#{name},#{age}) </insert>
接口映射器
在接口映射器中通過注解@Options
分別設置參數(shù)useGeneratedKeys,keyProperty,keyColumn值
// 返回主鍵字段id值 @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") @Insert("insert into stu (name,age) values (#{name},#{age})") void insert(Student stu);
獲取新添加記錄主鍵字段值
需要注意的是,在MyBatis中添加操作返回的是記錄數(shù)并非記錄主鍵id。因此,如果需要獲取新添加記錄的主鍵值,需要在執(zhí)行添加操作之后,直接讀取Java對象的主鍵屬性。
Integer rows = sqlSession.getMapper(StuMapper.class).insertOneTest(student); System.out.println("rows = " + rows); // 添加操作返回記錄數(shù) System.out.println("id = " + student.getId()); // 執(zhí)行添加操作之后通過Java對象獲取主鍵屬性值
添加批量記錄時返回主鍵ID
如果希望執(zhí)行批量添加并返回各記錄主鍵字段值,只能在xml映射器中實現(xiàn),在接口映射器中無法做到。
<!-- 批量添加數(shù)據(jù),并返回主鍵字段 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id"> insert into stu (name,age) values <foreach collection="list" separator="," item="t"> (#{t.name},#{t.age}) </foreach> </insert>
可以看到,執(zhí)行批量添加并返回記錄主鍵值的xml映射器配置,跟添加單條記錄時是一致的。不同的地方僅僅是使用了foreach元素構建批量添加語句。
到此這篇關于mybatis插入數(shù)據(jù)后返回自增主鍵ID詳解的文章就介紹到這了,更多相關mybatis插入數(shù)據(jù)后返回自增主鍵ID詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于Scanner中nextInt()、nextLine()等方法總結與問題解決
這篇文章主要介紹了關于Scanner中nextInt()、nextLine()等方法總結與問題解決,具有很好的參考價值,希望對大家有所幫助。2022-11-11Spring Cloud Gateway重試機制的實現(xiàn)
這篇文章主要介紹了Spring Cloud Gateway重試機制的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03SpringBoot實現(xiàn)Server-Sent Events(SSE)的使用完整指南
使用SpringBoot實現(xiàn)Server-Sent Events(SSE)可以有效處理實時數(shù)據(jù)推送需求,具有單向通信、輕量級和高實時性等優(yōu)勢,本文詳細介紹了在SpringBoot中創(chuàng)建SSE端點的步驟,并通過代碼示例展示了客戶端如何接收數(shù)據(jù),適用于實時通知、數(shù)據(jù)展示和在線聊天等場景2024-09-09springboot+thymeleaf+mybatis實現(xiàn)甘特圖的詳細過程
這篇文章主要介紹了springboot+thymeleaf+mybatis實現(xiàn)甘特圖的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07解決SpringBoot中使用@Transactional注解遇到的問題
這篇文章主要介紹了SpringBoot中使用@Transactional注解遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09如何使用BigDecimal實現(xiàn)Java開發(fā)商業(yè)計算
這篇文章主要介紹了如何使用BigDecimal實現(xiàn)Java開發(fā)商業(yè)計算,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09