使用MyBatis批量插入數(shù)據(jù)

?最近工作中要用到批量插入家坎,由于插入的數(shù)據(jù)量很大,采用foreach直接拼接SQL時擎浴,由于數(shù)據(jù)量大,拼接的SQL超過mybatis的限制后毒涧,造成異常導致插入失敗贮预,經(jīng)過網(wǎng)上搜索一番,發(fā)現(xiàn)零零散散的不完整链嘀,都無法使用,后來經(jīng)過自己整理后档玻,大功告成怀泊,在此記錄以備查詢。

mapper代碼片段:

  <insert id="insertBatch" parameterType="java.util.List">
      insert into ics.DAY_REPORT_PROJECT (PID, REPORTDATE, PROJECTID, PROJECTAMT, BIDTIME, BIDURL, TRANSFERSTATUS,LIMITTYPE, PROJECTLIMIT, BIDRATE, VALUEDATE, REPAYTYPE, ASSURETYPE, CREATETIME)
         select ics.SEQ_report_project_PID.Nextval, a.* from (
           <foreach collection="list" item="item" index="index" separator="union all" >  
              select #{item.reportDate}, #{item.projectId}, #{item.projectAmt}, #{item.bidTime}, #{item.bidUrl}, #{item.transferStatus},#{item.limitType}, #{item.projectLimit}, #{item.bidRate}, #{item.valueDate}, #{item.repayType}, #{item.assureType}, #{item.createTime}
              from dual
           </foreach>
          ) a
   </insert>

dao代碼片段:

    /**
     * 批量插入項目信息
     * 
     * @param reportProjects
     * @throws Exception
     */
    public void insert(List<DayReportProject> reportProjects) throws Exception {
        int result = 1;
        SqlSession batchSqlSession = null;
        try {
            batchSqlSession = this.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
            // 獲取批量方式的sqlsession
            int batchCount = 1000; // 每批commit的個數(shù)
            int batchLastIndex = batchCount; // 每批最后一個的下標
            for (int index = 0; index < reportProjects.size();) {
                if (batchLastIndex >= reportProjects.size()) {
                    batchLastIndex = reportProjects.size();
                    result = result * batchSqlSession.insert("cn.hepai.model.DayReportProject.insertBatch", reportProjects.subList(index, batchLastIndex));
                    batchSqlSession.commit();
                    batchSqlSession.clearCache(); // 清理緩存误趴,防止溢出
                    log.info("index : " + index + ", batchLastIndex : " + batchLastIndex + ", 共插入項目信息 : " + (batchLastIndex + 1) + "條");
                    break; // 數(shù)據(jù)插入完畢霹琼,退出循環(huán)
                } else {
                    result = result * batchSqlSession.insert("cn.hepai.model.DayReportProject.insertBatch", reportProjects.subList(index, batchLastIndex));
                    batchSqlSession.commit();
                    batchSqlSession.clearCache();
                    log.info("index : " + index + ", batchLastIndex : " + batchLastIndex + ", 共插入項目信息 : " + (batchLastIndex + 1) + "條");
                    index = batchLastIndex; // 設置下一批下標
                    batchLastIndex = index + (batchCount - 1);
                }
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            batchSqlSession.rollback();
        } finally {
            batchSqlSession.close();
        }
    }

測試通過,執(zhí)行速度很快凉当,上線后運行平穩(wěn)枣申。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市看杭,隨后出現(xiàn)的幾起案子忠藤,更是在濱河造成了極大的恐慌,老刑警劉巖楼雹,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件模孩,死亡現(xiàn)場離奇詭異,居然都是意外死亡贮缅,警方通過查閱死者的電腦和手機榨咐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谴供,“玉大人块茁,你說我怎么就攤上這事」鸺。” “怎么了数焊?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崎场。 經(jīng)常有香客問我昌跌,道長,這世上最難降的妖魔是什么照雁? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任蚕愤,我火速辦了婚禮答恶,結果婚禮上,老公的妹妹穿的比我還像新娘萍诱。我一直安慰自己悬嗓,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布裕坊。 她就那樣靜靜地躺著包竹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪籍凝。 梳的紋絲不亂的頭發(fā)上周瞎,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音饵蒂,去河邊找鬼声诸。 笑死,一個胖子當著我的面吹牛退盯,可吹牛的內(nèi)容都是我干的彼乌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼渊迁,長吁一口氣:“原來是場噩夢啊……” “哼慰照!你這毒婦竟也來了?” 一聲冷哼從身側響起琉朽,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤毒租,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后箱叁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝌衔,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年蝌蹂,在試婚紗的時候發(fā)現(xiàn)自己被綠了噩斟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡孤个,死狀恐怖剃允,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情齐鲤,我是刑警寧澤斥废,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站给郊,受9級特大地震影響牡肉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜淆九,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一统锤、第九天 我趴在偏房一處隱蔽的房頂上張望毛俏。 院中可真熱鬧,春花似錦饲窿、人聲如沸煌寇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阀溶。三九已至,卻和暖如春鸦泳,著一層夾襖步出監(jiān)牢的瞬間银锻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工做鹰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留击纬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓誊垢,卻偏偏與公主長得像掉弛,于是被迫代替她去往敵國和親症见。 傳聞我的和親對象是個殘疾皇子喂走,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL谋作、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,527評論 0 4
  • Mybatis相關 1.Mybatis是什么? 2.為什么選擇Mybatis? 3芋肠、#{}和${}的區(qū)別是什么? ...
    zhihaoZzz閱讀 1,284評論 0 2
  • Mybatis相關 1.Mybatis是什么? 2.為什么選擇Mybatis? 3遵蚜、#{}和${}的區(qū)別是什么帖池? ...
    夢殤_fccd閱讀 988評論 0 5
  • 小時候我們是被父母深愛的孩子睡汹,同時我們也被老師愛,被朋友愛寂殉。 長大后我們希望被老板愛囚巴,被同事愛,同時也希望被自己所...
    柒樾閱讀 255評論 1 2
  • 如果那時夜未央,如果那時愛未涼…… 可惜那時夜已央村怪,可惜那時愛已涼……
    即墨七七閱讀 112評論 0 0