91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis如何批量插入并返回主鍵id

發布時間:2022-03-25 09:15:31 來源:億速云 閱讀:939 作者:iii 欄目:開發技術

這篇文章主要介紹“Mybatis如何批量插入并返回主鍵id”,在日常操作中,相信很多人在Mybatis如何批量插入并返回主鍵id問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mybatis如何批量插入并返回主鍵id”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

場景

在做商城的時候,sku表進行了拆分,sku的基本信息以及sku的庫存表。因為庫存會經常的變動,會導致行鎖。

這里就是新增的時候,因為在新增商品的時候,會有多條sku的數據進行批量的插入,那么有批量插入sku基本信息以及批量插入sku的庫存信息。

其中,就需要批量插入sku的基本信息的時候,返回主鍵id,這就能夠在sku批量插入庫存信息的時候能夠插入skuId;

錯誤

nested exception is org.apache.ibatis.executor.ExecutorException: 
Error getting generated key or setting result to parameter object. 
Cause: org.apache.ibatis.executor.ExecutorException: Could not determine which parameter to assign generated keys to. 
Note that when there are multiple parameters, 'keyProperty' must include the parameter name (e.g. 'id'). Specified key properties are [id] and available parameters are [XXX, XXX, param1, param2]

分析原因

  • 數據庫是否支持自動生成密鑰字段(例如MySQL和SQL Server),那么就只需設置useGeneratedKeys=“true” 并將 keyProperty設置為Java對象的屬性名,keyColumn是數據庫中的列名(當主鍵列不是表中的第一列的時候,它必須設置的)

  • 傳參有多個個參數,mybatis并不知道keyProperty = "id"中的 id 賦值給誰

  • (我就是這里出錯)

  • 我看其他的博客還有說是版本的問題,建議3.3.1以上的。

排查問題

數據庫是MySQL,設置了 useGeneratedKeys=“true” ,且 keyProperty = id是Java對象的屬性名,id是主鍵列且在第一列中

Mybatis如何批量插入并返回主鍵id

就是這里出錯,keyProperty=“id”,導致不知道id返回到哪一個參數中

原來:

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
    insert into goods_sku (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    <foreach collection="param1" item="item" index="index" separator=",">
        <if test="item != null">
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        </if>
    </foreach>
</insert>

進行修改:

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="goodsSkuDTOs.id">
    insert into goods_sku
    (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    <foreach collection="param1" item="item" index="index" separator=",">
        <if test="item != null">
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        </if>
    </foreach>
</insert>

依賴版本:

Mybatis如何批量插入并返回主鍵id

附上完整的Mapper以及Xml文件

GoodsSkuMapper.java

int insertBatch(@Param("goodsSkuDTOs") List<GoodsSkuDTO> goodsSkuDTOs, @Param("goodsId") Long goodsId,@Param("date") Date date);

GoodsSkuMapper.xml

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="goodsSkuDTOs.id">
    insert into goods_sku (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    <foreach collection="param1" item="item" index="index" separator=",">
        <if test="item != null">
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        </if>
    </foreach>
</insert>

到此,關于“Mybatis如何批量插入并返回主鍵id”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连山| 敖汉旗| 金平| 防城港市| 武宁县| 容城县| 台湾省| 修武县| 凯里市| 边坝县| 顺平县| 丰镇市| 凤城市| 方城县| 云浮市| 凤台县| 滁州市| 福建省| 柳林县| 和静县| 府谷县| 龙里县| 荆州市| 法库县| 城市| 陕西省| 云南省| 景德镇市| 张家港市| 盐山县| 武定县| 繁昌县| 连南| 丹东市| 邵阳市| 潞城市| 高密市| 巴彦县| 错那县| 陇西县| 峡江县|