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