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