mybatis批量插入返回主鍵失敗的坑及解決
批量插入返現(xiàn)沒有返回主鍵
關(guān)鍵點(diǎn)
foreach里的collection必須是list,不然就會(huì)報(bào)錯(cuò)。
返回主鍵的標(biāo)簽
關(guān)于返回主鍵ID,需要在insert標(biāo)簽中添加,useGeneratedKeys=“true” keyProperty=“id”,useGeneratedKeys和keyProperty必須配合使用,keyProperty的字段就是返回的主鍵ID
mybatis3.3.1及以上的版本,才支持批量插入返回主鍵ID
mybatis批量新增之主鍵回寫
正常批量新增比較簡單 :
寫個(gè)例子
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="id"> INSERT INTO `x'x'x` ( `xx`, `xxx` ) VALUES <foreach collection="list" item="item" separator=","> ( #{item.xx}, #{item.xxx} ) </foreach> </insert>
注: useGeneratedKeys=“true” keyProperty=“id” 這個(gè)是為了回寫id的.
以前基本上沒有需要用到回寫id的地方,但是今天需要用到了.
但是一開始并沒有給我回寫主鍵.
原因就在于我的collection=“這里寫的不是list,而是xxList”.
我的mapper里面寫的是@param(“xxList”); 多個(gè)參數(shù)時(shí)需要使用這個(gè)注解指定.
這樣執(zhí)行是不會(huì)報(bào)錯(cuò)的.但是id就是不會(huì)回寫.
再回頭, 這里應(yīng)該是一個(gè)映射的概念, 以前應(yīng)該是想錯(cuò)了.
待我查閱了一些資料之后,我認(rèn)為,這個(gè)collection,應(yīng)該不是用來指定你在mapper里面?zhèn)魅氲氖裁磪?shù)的.
而是指定這個(gè)集合的類型是什么? 比如: list,set,map這樣的類型.
而當(dāng)我寫成這樣時(shí) : collection=“list” @Param(“list”).
id就給我回寫了.而當(dāng)我傳入的參數(shù)不止一個(gè)時(shí),我依舊可以使用@Param進(jìn)行正常定義.但是是一個(gè)對象,一個(gè)String,我沒有試過傳入兩個(gè)對象的,而且我認(rèn)為,無論需要什么字段,一個(gè)對象就可以搞定,我傳入兩個(gè)參數(shù),只是做一次嘗試.如果只是一個(gè)對象的話,甚至都不需要用@Param.id也是會(huì)回寫的.
但是 collection="list"這個(gè)是一定要這樣寫的.不然會(huì)報(bào)錯(cuò)
要么全部成功,要么全部失敗,使用int去接收返回值,會(huì)接收到新增的條數(shù)的.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis中實(shí)體類屬性與數(shù)據(jù)列表間映射方法介紹
這篇文章主要介紹了Mybatis中實(shí)體類屬性與數(shù)據(jù)列表間映射方法介紹,一共四中方法,供大家參考。2017-10-10Java中Queue的poll()和remove()區(qū)別詳解
這篇文章主要介紹了Java中Queue的poll()和remove()區(qū)別詳解,Queue接口提供了許多方法,其中poll()和remove()是兩個(gè)常用的方法,它們的區(qū)別在于,當(dāng)隊(duì)列為空時(shí),poll()方法返回null,而remove()方法會(huì)拋出,需要的朋友可以參考下2023-07-07java實(shí)現(xiàn)切割wav音頻文件的方法詳解【附外部jar包下載】
這篇文章主要介紹了java實(shí)現(xiàn)切割wav音頻文件的方法,結(jié)合實(shí)例形式詳細(xì)分析了java切割wav音頻文件的相關(guān)原理、操作技巧與注意事項(xiàng),并附帶外部jar包供讀者下載,需要的朋友可以參考下2019-05-05Java使用分治算法實(shí)現(xiàn)排序數(shù)索引功能示例【二分搜索】
這篇文章主要介紹了Java使用分治算法實(shí)現(xiàn)排序數(shù)索引功能,結(jié)合具體實(shí)例形式分析了java分治算法進(jìn)行排序索引的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Mybatis動(dòng)態(tài)查詢字段及表名的實(shí)現(xiàn)
本文主要介紹了Mybatis動(dòng)態(tài)查詢字段及表名的實(shí)現(xiàn),通過靈活運(yùn)用Mybatis提供的動(dòng)態(tài)SQL功能,我們可以構(gòu)建更加靈活、高效的查詢語句,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2024-01-01SpringCloud?hystrix斷路器與局部降級(jí)全面介紹
什么是服務(wù)降級(jí)?當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況及流量,對一些服務(wù)和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運(yùn)作或高效運(yùn)作2022-10-10Spring中Bean有關(guān)NullPointerException異常的原因分析
在Spring中使用@Autowired注解注入的bean不能在靜態(tài)上下文中訪問,否則會(huì)導(dǎo)致NullPointerException,解決方法包括避免在靜態(tài)方法中使用注入的bean,或者使用Spring的ApplicationContext來獲取bean,但后者不推薦2024-12-12Java實(shí)現(xiàn)簡單雙色球搖獎(jiǎng)功能過程解析
這篇文章主要介紹了Java實(shí)現(xiàn)簡單雙色球搖獎(jiǎng)功能過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09