Mybatis兩種不同批量插入方式的區(qū)別
前言
本文使用 Mybatis 進行批量插入,比較兩種不同的插入方式的區(qū)別。
測試
批量插入注意事項:
1、連接數(shù)據(jù)庫時添加參數(shù) allowMultiQueries=true,支持多語句執(zhí)行,批處理
2、數(shù)據(jù)庫是否支持大量數(shù)據(jù)寫入,設置 max_allowed_packet參數(shù)保證批次提交的數(shù)據(jù)量
拼接 sql
public void batchDemo() { long start = System.currentTimeMillis(); List<User> list = new ArrayList<>(); for (int i = 0; i < 5000; i++) { User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName("feiyangyang"); user.setPwd("feiyangyang"); list.add(user); } userService.batchForeach(list); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + "---------------"); }
<insert id="batchForeach" parameterType="com.fyy.druid.entity.User"> insert into user(id,`name`,pwd) values <foreach collection ="userList" item="user" separator =","> (#{user.id}, #{user.name}, #{user.pwd}) </foreach> </insert>
batch插入
public void batchInsert() { long start = System.currentTimeMillis(); SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH); UserService mapper = sqlSession.getMapper(UserService.class); for (int i = 0; i < 5000; i++) { User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName("feiyangyang"); user.setPwd("feiyangyang"); mapper.batchInsert(user); } sqlSession.commit(); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + " ---------------"); }
注意:batch模式也有自己的問題,比如在Insert操作時,在事務沒有提交之前,是沒有辦法獲取到自增的id,這在某型情形下是不符合業(yè)務要求的
數(shù)據(jù)對比
拼接sql (ms) | batch插入 (ms) | |
---|---|---|
500條 | 1744 | 639 |
2000條 | 26966 | 2473 |
5000條 | 173668 | 7382 |
總結(jié)
到此這篇關于Mybatis兩種不同批量插入方式區(qū)別的文章就介紹到這了,更多相關Mybatis批量插入方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot中Token登錄授權(quán)、續(xù)期和主動終止的方案流程分析
SpringBoot項目中,基于Token的登錄授權(quán)方案主要有兩種:利用Session/Cookie和JWT,Cookie/Session方案有狀態(tài),不適合分布式架構(gòu),而JWT雖無狀態(tài),但存在過期時間不可強制失效、一次性等缺點,本文介紹SpringBoot中Token登錄授權(quán)、續(xù)期和主動終止的方案,感興趣的朋友一起看看吧2024-09-09Springboot如何獲取配置文件application.yml中自定義的變量并使用
這篇文章主要介紹了Springboot中獲取配置文件(application.yml)中自定義的變量并使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09Java面試題 從源碼角度分析HashSet實現(xiàn)原理
這篇文章主要介紹了Java面試題 從源碼角度分析HashSet實現(xiàn)原理?,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07SpringBoot中使用@scheduled定時執(zhí)行任務的坑
本文主要介紹了SpringBoot中使用@scheduled定時執(zhí)行任務的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05關于Java中的實體類要?implements?Serializable的原因分析
這篇文章主要介紹了Java中的實體類為什么要?implements?Serializable,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06詳解rabbitmq創(chuàng)建queue時arguments參數(shù)注釋
這篇文章主要介紹了rabbitmq創(chuàng)建queue時arguments參數(shù)注釋,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03