java实现批量插入数据
短信预约 -IT技能 免费直播动态提醒
日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,可能由于数据库限制,插入的数据最多不能超过100条(假如限制100条),就算是数据库支持一次性插入千条也会耗内存,如果使用一条一条的插入数据库中的话,会特别耗时间,大概是正常批量插入数据所耗时间的三倍,所以我们就会用到分批插入数据。
- 思路
- 我们将数据查出,放到list里面,然后将数据循环,每次循环到100条,就调用批量插入接口。
代码实现:
@Override public void selectData(String statisDate, String eventCode) { List<FilterLogEntity> filterLogEntity = filterlogMapper.selectData(statisDate, eventCode); //存储插入数据(100条数据) List<DataLog> dataLogList = new ArrayList<>(); int nums = 100; for (int i = 0; i < filterLogEntity.size(); i++) { dataLogList.add(filterLogEntity.get(i)); if (i > 0 && i % nums == 0 || i == filterLogEntity.size() - 1) { filterOraMapper.insertData(dataLogList); //每次插入完数据,将上次存储的100条数据清空 dataLogList.clear(); } } }
xml中sql,此处是给oracle数据库中插入数据
<insert id="insertData">insert into 表名(a,b,c)<foreach collection="dataLogList" item="item" separator="UNION ALL">select#{item.a},#{item.b},#{item.c}from dual</foreach></insert>
给其他数据库插入数据:
<insert id="insertList" parameterType="java.util.List">insert into 表名 (a,b,c)VALUES<foreach collection="dataLogList" index="index" item="item" separator="," >(#{item.a},#{item.b},#{item.c})</foreach></insert>
后续新增:给oracle数据库插入数据,也可以用这种方法```xmlbegin <foreach collection="list" item="item" index="index"> insert into masakr.TB_HUMAN_SOCIAL_SECURITY@LINK33 (date_time, province, city, pr_name, pr_lingering_num, city_name, city_lingering_num, gender_name,gender_num) values( #{item.dateTime}, #{item.province}, #{item.city}, #{item.prName}, #{item.prLingeringNum}, #{item.cityName}, #{item.cityLingeringNum}, #{item.genderName}, #{item.genderNum} ); </foreach> end;
来源地址:https://blog.csdn.net/qq_58545721/article/details/129791645
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341