mybatis批量插入返回主鍵失敗的坑及解決
批量插入返現(xiàn)沒(méi)有返回主鍵
關(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批量新增之主鍵回寫(xiě)
正常批量新增比較簡(jiǎn)單 :
寫(xiě)個(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è)是為了回寫(xiě)id的.
以前基本上沒(méi)有需要用到回寫(xiě)id的地方,但是今天需要用到了.
但是一開(kāi)始并沒(méi)有給我回寫(xiě)主鍵.
原因就在于我的collection=“這里寫(xiě)的不是list,而是xxList”.
我的mapper里面寫(xiě)的是@param(“xxList”); 多個(gè)參數(shù)時(shí)需要使用這個(gè)注解指定.
這樣執(zhí)行是不會(huì)報(bào)錯(cuò)的.但是id就是不會(huì)回寫(xiě).
再回頭, 這里應(yīng)該是一個(gè)映射的概念, 以前應(yīng)該是想錯(cuò)了.
待我查閱了一些資料之后,我認(rèn)為,這個(gè)collection,應(yīng)該不是用來(lái)指定你在mapper里面?zhèn)魅氲氖裁磪?shù)的.
而是指定這個(gè)集合的類(lèi)型是什么? 比如: list,set,map這樣的類(lèi)型.
而當(dāng)我寫(xiě)成這樣時(shí) : collection=“list” @Param(“list”).
id就給我回寫(xiě)了.而當(dāng)我傳入的參數(shù)不止一個(gè)時(shí),我依舊可以使用@Param進(jìn)行正常定義.但是是一個(gè)對(duì)象,一個(gè)String,我沒(méi)有試過(guò)傳入兩個(gè)對(duì)象的,而且我認(rèn)為,無(wú)論需要什么字段,一個(gè)對(duì)象就可以搞定,我傳入兩個(gè)參數(shù),只是做一次嘗試.如果只是一個(gè)對(duì)象的話(huà),甚至都不需要用@Param.id也是會(huì)回寫(xiě)的.
但是 collection="list"這個(gè)是一定要這樣寫(xiě)的.不然會(huì)報(bào)錯(cuò)
要么全部成功,要么全部失敗,使用int去接收返回值,會(huì)接收到新增的條數(shù)的.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis中實(shí)體類(lèi)屬性與數(shù)據(jù)列表間映射方法介紹
這篇文章主要介紹了Mybatis中實(shí)體類(lèi)屬性與數(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)簡(jiǎn)易的計(jì)算器界面
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04java實(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)查詢(xún)字段及表名的實(shí)現(xiàn)
本文主要介紹了Mybatis動(dòng)態(tài)查詢(xún)字段及表名的實(shí)現(xiàn),通過(guò)靈活運(yùn)用Mybatis提供的動(dòng)態(tài)SQL功能,我們可以構(gòu)建更加靈活、高效的查詢(xún)語(yǔ)句,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2024-01-01SpringCloud?hystrix斷路器與局部降級(jí)全面介紹
什么是服務(wù)降級(jí)?當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況及流量,對(duì)一些服務(wù)和頁(yè)面有策略的不處理或換種簡(jiǎn)單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運(yùn)作或高效運(yùn)作2022-10-10Spring中Bean有關(guān)NullPointerException異常的原因分析
在Spring中使用@Autowired注解注入的bean不能在靜態(tài)上下文中訪(fǎng)問(wèn),否則會(huì)導(dǎo)致NullPointerException,解決方法包括避免在靜態(tài)方法中使用注入的bean,或者使用Spring的ApplicationContext來(lái)獲取bean,但后者不推薦2024-12-12Java實(shí)現(xiàn)簡(jiǎn)單雙色球搖獎(jiǎng)功能過(guò)程解析
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單雙色球搖獎(jiǎng)功能過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09