最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決MybatisPlus批量插入數(shù)據(jù)報(bào)錯(cuò):Error getting generated key or setting result to parameter object問題

 更新時(shí)間:2024年09月25日 09:26:30   作者:Duktig丶  
在使用MybatisPlus進(jìn)行批量插入數(shù)據(jù)時(shí)遇到空指針異常錯(cuò)誤,分析原因是由于主鍵生成策略導(dǎo)致的,嘗試通過設(shè)置useGeneratedKeys屬性解決問題,但因批量插入方法限制,該方法未能成功,最終通過自定義mapper方法實(shí)現(xiàn)批量插入,解決了問題

問題描述

執(zhí)行的核心代碼:

objectUserService.saveBatch(objectUserList);

在使用MybatisPlus進(jìn)行執(zhí)行批量插入操作的時(shí)候報(bào)錯(cuò),導(dǎo)致每次插入數(shù)據(jù)失敗。

具體報(bào)錯(cuò)信息如下:

xiaoyun_notice- 2020-07-14 20:34:09 [http-nio-9001-exec-1] INFO  c.x.api.controller.ObjectController - 【新增通知:step02-object_user批量新增,維護(hù)中間表】: userId: 2
xiaoyun_notice- 2020-07-14 20:34:09 [http-nio-9001-exec-1] INFO  jdbc.sqltiming - batching 3 statements: 1: INSERT INTO object_user ( obj_id, user_id ) VALUES ( 151, 1 ) 2: 
INSERT INTO object_user ( obj_id, user_id ) VALUES ( 151, 2 ) 3: INSERT INTO object_user ( 
obj_id, user_id ) VALUES ( 151, 3 ) ;
 {executed in 75 msec}
xiaoyun_notice- 2020-07-14 20:34:09 [http-nio-9001-exec-1] INFO  jdbc.sqltiming - getGeneratedKeys on query: INSERT INTO object_user ( obj_id, user_id ) VALUES ( 151, 3 ) ;
 {executed in 0 msec}
xiaoyun_notice- 2020-07-14 20:34:09 [http-nio-9001-exec-1] ERROR c.x.e.handler.GlobalExceptionHandler - nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException

主要報(bào)錯(cuò)信息:

ERROR c.x.e.handler.GlobalExceptionHandler - nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException

問題分析

根據(jù)上述的主要報(bào)錯(cuò)信息,可以推測(cè)出MybatisPlus在底層執(zhí)行新增操作時(shí),返回的主鍵為空,報(bào)了個(gè)空指針的異常,又因?yàn)榧恿耸聞?wù)的緣故,所以每次執(zhí)行新增操作,失敗。

問題解決過程

百度上所說的大多數(shù)的解決策略都是說主鍵生成策略的問題。

即設(shè)置mybatis的insert語句useGeneratedKeys屬性為false即可解決問題。

網(wǎng)上大多使用的xml去配置,可以在寫到SpringBoot的時(shí)候,基本就不怎么寫xml文件,多以就想著使用注解去設(shè)置,還真有設(shè)置這樣的注解。

@Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id")

option注解標(biāo)簽useGeneratedKeys=true表示使用數(shù)據(jù)庫自動(dòng)增長(zhǎng)的主鍵,keyColumn用于指定數(shù)據(jù)庫table中的主鍵,keyProperty用于指定傳入對(duì)象的成員變量。

Springboot中 Mybatis 配置文件 Mapper參數(shù)useGeneratedKeys=“true” keyProperty=“id”,useGeneratedKeys設(shè)置為 true 時(shí),表示如果插入的表id以自增列為主鍵,則允許 JDBC 支持自動(dòng)生成主鍵,并可將自動(dòng)生成的主鍵id返回。

useGeneratedKeys參數(shù)只針對(duì) insert 語句生效,默認(rèn)為 false;

默認(rèn)為false怎么還會(huì)生效?難道說是MybatisPlus底層有做了處理。

局限性

雖然這樣使用可能可以成功,但是批量插入的方法,是MybatisPlus底層提供的,我們沒有辦法在mapper中添加這個(gè)注解,將這個(gè)注解添加到當(dāng)前方法,還是失敗。

后續(xù)更新

經(jīng)過各種嘗試,這樣的方法還是失敗,所以這個(gè)需求暫時(shí)不使用MybatisPlus的批量新增來寫了,就自己寫個(gè)新增的mapper方法吧。

替代解決方案

因?yàn)轫?xiàng)目開發(fā)需要,不能再耗時(shí)間,所以干脆就在寫個(gè)自定義的mapper批量新增的方法來解決這個(gè)問題吧。

方法如下:

/**
 * description: 新增通知時(shí),維護(hù)中間表,批量新增
 *
 * @param objId   通知id
 * @param userIds 用戶id集合
 * @return 執(zhí)行條數(shù)
 */
@Insert({
        "<script>",
        "INSERT INTO object_user(obj_id, user_id,created_at,updated_at) values ",
        "<foreach collection='userIds' item='item' index='index' separator=','>",
        "(#{objId}, #{item},now(),now())",
        "</foreach>",
        "</script>"
})
int saveObjectUserList ( int objId, List<Integer> userIds );

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)發(fā)送郵件功能的三種方式

    SpringBoot實(shí)現(xiàn)發(fā)送郵件功能的三種方式

    本文詳細(xì)介紹了如何在SpringBoot應(yīng)用中使用JavaMailSender、JavaMailAPI和ApacheCommonsEmail庫發(fā)送郵件,對(duì)比了它們的優(yōu)缺點(diǎn),并提供了示例代碼和配置指導(dǎo),需要的朋友可以參考下
    2025-07-07
  • java使用spring實(shí)現(xiàn)發(fā)送mail的方法

    java使用spring實(shí)現(xiàn)發(fā)送mail的方法

    這篇文章主要介紹了java使用spring實(shí)現(xiàn)發(fā)送mail的方法,涉及java基于spring框架發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用

    分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用

    這篇文章主要為大家介紹了分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Java面向?qū)ο蟪绦蛟O(shè)計(jì)多態(tài)性示例

    Java面向?qū)ο蟪绦蛟O(shè)計(jì)多態(tài)性示例

    這篇文章主要介紹了Java面向?qū)ο蟪绦蛟O(shè)計(jì)多態(tài)性,結(jié)合實(shí)例形式分析了java多態(tài)性的概念、原理、定義與使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-03-03
  • JavaWeb中的文件的上傳和下載

    JavaWeb中的文件的上傳和下載

    JavaWeb 文件的上傳和下載是指在Web應(yīng)用中實(shí)現(xiàn)用戶上傳文件到服務(wù)器和從服務(wù)器下載文件的功能,通過JavaWeb技術(shù),可以方便地實(shí)現(xiàn)文件的上傳和下載操作,提供更好的用戶體驗(yàn)和數(shù)據(jù)交互,需要的朋友可以參考下
    2023-10-10
  • Java 圖片復(fù)制功能實(shí)現(xiàn)過程解析

    Java 圖片復(fù)制功能實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java 圖片復(fù)制功能實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java中線程Thread的三種方式和對(duì)比

    Java中線程Thread的三種方式和對(duì)比

    這篇文章主要介紹了Java中線程Thread的三種方式和對(duì)比,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java 超詳細(xì)講解抽象類與接口的使用

    Java 超詳細(xì)講解抽象類與接口的使用

    對(duì)于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一,在 Java 中可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關(guān)于Java入門基礎(chǔ)之抽象類與接口的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 在Spring應(yīng)用中進(jìn)行單元測(cè)試的解析和代碼演示

    在Spring應(yīng)用中進(jìn)行單元測(cè)試的解析和代碼演示

    在Spring應(yīng)用中進(jìn)行單元測(cè)試通常涉及到Spring TestContext Framework,它提供了豐富的注解和工具來支持單元測(cè)試和集成測(cè)試,以下是如何在Spring應(yīng)用中進(jìn)行單元測(cè)試的詳細(xì)解析和代碼演示,需要的朋友可以參考下
    2024-06-06
  • 在Mac OS上安裝Java以及配置環(huán)境變量的基本方法

    在Mac OS上安裝Java以及配置環(huán)境變量的基本方法

    這篇文章主要介紹了在Mac OS上安裝Java以及配置環(huán)境變量的基本方法,包括查看所安裝Java版本的方法,需要的朋友可以參考下
    2015-10-10

最新評(píng)論

互助| 太谷县| 江都市| 桓台县| 亳州市| 萨迦县| 江达县| 绥中县| 陕西省| 丹巴县| 运城市| 项城市| 南充市| 汉沽区| 额济纳旗| 北海市| 璧山县| 莱州市| 漯河市| 祁门县| 乐陵市| 保山市| 临高县| 博野县| 谷城县| 古蔺县| 微博| 淮滨县| 昭平县| 项城市| 桓仁| 凤台县| 巩义市| 玉门市| 武冈市| 望都县| 安达市| 宣化县| 科技| 柘城县| 辽阳县|