MyBatis Oracle 批量插入数据

MyBatis Oracle 批量插入数据

  • 1.需求描述
  • 2.实现方案
    • 2.1 循环 insert 插入
    • 2.2 insert all 插入
    • 2.3 insert union all 插入
  • 3.分析总结

系统:Win10
JDK:1.8.0_351
IDEA:2022.3.3

1.需求描述

在一次项目中实施过程中,后台需要将地区数据插入到数据库,数据大概三千条左右,本来直接使用循环遍历插入的方式,结果居然需要十几秒的时间,感觉速度太慢了,所以便想办法提高插入数据的速度,经过多番资料查询和验证,结果选定了一款实现方式,特此记录下来。

2.实现方案

数据:3208 条
需求:将数据插入到 Oracle 数据库

2.1 循环 insert 插入

最基础的就是使用 for 循环遍历 list 数据,一个个进行插入

java 代码

...//循环插入StopWatch started = new StopWatch();started.start();//开始计时for (Region region : regions) {regionMapper.insert(region);}started.stop();//停止计时System.out.println("插入" + list.size() + "条数据耗时: " + started.getTime());
...

mapper 接口

int insert(Region region);

xml 语句

<insert id="insert">insert into DATA_REGION(id, name, pid)values (#{id}, #{name}, #{pid})
</insert>

这里测试执行了 3 次,平均耗时:15160 ms
在这里插入图片描述

2.2 insert all 插入

这里主要使用的 Oracle 的 INSERT ALL 语法

INSERT ALLINTO table_name(col1,col2,col3) VALUES(val1,val2, val3)INTO table_name(col1,col2,col3) VALUES(val4,val5, val6)INTO table_name(col1,col2,col3) VALUES(val7,val8, val9)
Subquery;

该方法用来批量向数据库中插入数据所用的

java 代码

...
//insert all 插入
StopWatch started = new StopWatch();
started.start();//开始计时
regionMapper.insertAll(regions);
started.stop();//停止计时
System.out.println("插入" + list.size() + "条数据耗时: " + started.getTime());
...

mapper 接口

int insertAll(List<Region> list);

xml 语句

<insert id="insertAll">insert all<foreach collection="list" item="item" index="index">into DATA_REGION(id, name, pid) VALUES (#{item.id},#{item.name},#{item.pid})</foreach>select 1 from dual
</insert>

这里测试执行了 3 次,平均耗时:8171 ms
在这里插入图片描述

2.3 insert union all 插入

这里是使用 union all 先将各个对象的值查询到一起再批量插入到表中

java 代码

...
//batchInsert
StopWatch started = new StopWatch();
started.start();//开始计时
regionMapper.batchInsert(regions);
started.stop();//停止计时
System.out.println("插入" + list.size() + "条数据耗时: " + started.getTime());
...

mapper 接口

int batchInsert(List<Region> list);

xml 语句

<insert id="batchInsert">insert into DATA_REGION(id, name, pid)<foreach collection="list" item="item" index="index" separator="union all">(select #{item.id},#{item.name},#{item.pid} from dual)</foreach>
</insert>

这里测试执行了 3 次,平均耗时:2619 ms
在这里插入图片描述

3.分析总结

根据上面的三次测试,我们可以得出如下表格

#循环 insert 插入insert all 插入insert union all 插入
平均耗时15.16s8.17s2.62s

所以我最后决定采用第三种方法,不过我这里数据量只有 3000 多条,如果数据量更大,可能要再测试看看。

后续看看还有没有更好的实现方案,如果找到我再添加到文章末尾。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给一篇word注音可不可以只要拼音不要汉字 word中如何只保留拼音不要汉字

word中如何只保留拼音不要汉字&#xff0c;如果你想要只保留拼音而去除汉字&#xff0c;可以通过一系列步骤来实现。以下是一个详细的教程&#xff0c;帮助你完成这个任务。 首先&#xff0c;确保你的电脑已经安装了“汇帮注音大师”软件。如果没有&#xff0c;你需要安装一下…

云计算 3月8号 (wordpress的搭建)

项目wordpress 实验目的&#xff1a; 熟悉yum和编译安装操作 锻炼关联性思维&#xff0c;便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…

Java实战:利用Redis实现每周热评

本文将详细介绍如何利用Redis实现每周热评的功能。我们将深入探讨Redis的相关概念&#xff0c;如键值对、数据结构、过期时间等&#xff0c;以及如何使用Java语言结合Jedis库进行Redis操作。 1. 引言 在现代的互联网应用中&#xff0c;实时统计和展示热门内容是一种常见的需求…

C语言知识点总结-10.共用体、结构体、宏定义、位运算等

第十章、共用体、结构体、宏定义、位运算 10.1 共用体 在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”

vscode setting.json 全局设置 工作区设置 位置 优先级

vscode中setting.json有两种配置权限 一、全局配置&#xff1a;setting.json文件位于C:\Users\Administrator\AppData\Roaming\Code\User\settings.json 二、工作区配置&#xff1a;setting.json文件位于工作区的.vscode\settings.json 当两种配置同时存在时&#xff0c;工作区…

深入理解nginx一致性哈希负载均衡模块[下]

上接 深入理解nginx一致性哈希负载均衡模块[上] 3. 源码分析 nginx的一致性哈希功能是通过ngx_http_upstream_hash_module来提供的,下面来整体通过ngx_http_upstream_hash_module来学习一下一致性哈希算法的实现原理。 3.1 配置指令分析 要启用Nginx的一致性哈希负载均衡算法…

生成对抗网络 (GAN)

生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;是由Ian Goodfellow等人在2014年提出的一种深度学习模型。GAN由两部分组成&#xff1a;一个生成器&#xff08;Generator&#xff09;和一个判别器&#xff08;Discriminator&#xff09;&…

一文学会搭建 cli 脚手架工具

文章目录 设置工具命令package.json bin 字段注释&#xff1a;#!/usr/bin/env node设置环境变量 接收命令选项参数process 实现commander 命令行交互&#xff1a;inquirer下载项目模板&#xff1a;download-git-repo执行额外命令&#xff1a;自动安装依赖child_processexeca 体…

取证工作:如何提取和破解网络浏览器用户密码

ElcomSoft 系列软件专注于破解及恢复广泛的应用环境&#xff08;Office、数据库、归档文件、iOS等&#xff09;、系统 (EFS加密等)、磁盘&#xff08;BitLocker、FileVault 2、PGP Disk、TrueCrypt 和 VeraCrypt 加密&#xff09;及网络浏览器的加密保护&#xff0c;是数据恢复…

基于卷积神经网络的野外可食用植物分类系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的可食用植物图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入迁移学习模型…

Mac测试环境搭建

1 下载pycharm 下载地址&#xff1a;PyCharm&#xff1a;JetBrains 出品的用于数据科学和 Web 开发的 Python IDE 2 安装python3.6.8 下载地址&#xff1a;Index of /ftp/python/3.6.8/ 安装后提示错误 换一种方式&#xff1a;用conda 下载地址&#xff1a;Free Download | …

python 远程执行windows上的程序

在Python中远程执行Windows上的程序&#xff0c;可以使用pywinrm库通过WinRM协议与Windows服务器进行通信。以下是一个基本示例&#xff1a; import winrm# 创建WinRM连接参数 username your_username password your_password endpoint http://remote_host:5985/wsman # 使…

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作、72. 编辑距离。

583. 两个字符串的删除操作 题目链接&#xff1a;两个字符串的删除操作 题目描述&#xff1a; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 解题思路&#xff1a; 1、确定dp数组&#x…

Oracle数据库参数文件

导读 Oracle参数文件&#xff1a;数据库配置和性能调优的关键 Oracle参数文件是数据库管理中至关重要的组成部分&#xff0c;它包含了一系列数据库配置参数的设置&#xff0c;可以影响数据库的性能、安全性和可用性。参数文件允许管理员对数据库进行定制化配置&#xff0c;以满…

ipad协议847最新版

ipad协议其实就是模拟ipad端微信的人工操作&#xff0c;跟微信服务器通信。协议的关键点主要是PB协议、mmtls、07加密算法、rqt算法、aes加密、rsa加密等&#xff0c;只要把这些点拿下&#xff0c;就可以模拟官方微信的所有功能了&#xff0c;还可以模拟android、pc、mac端的登…

数字音频工作站(DAW)fl studio 21 for mac 21.2.3.3586中文版图文安装教程

随着音乐制作行业的不断发展&#xff0c;越来越多的音乐人和制作人开始使用数字音频工作站&#xff08;DAW&#xff09;来创作和制作音乐。其中FL Studio 21是一个备受欢迎的选择&#xff0c;因为它提供了强大的音乐制作工具和易于使用的界面。 然而&#xff0c;一直以来&…

Elasticsearch的倒排索引简介

倒排索引介绍 Elasticsearch的倒排索引&#xff08;Inverted Index&#xff09;是其能够快速执行全文搜索查询的关键技术。为了理解倒排索引的工作原理&#xff0c;我们可以将其与传统的正向索引进行比较。 正向索引&#xff08;Forward Index&#xff09; 在正向索引中&…

2024 RubyMine 激活,分享几个RubyMine 激活的方案

文章目录 RubyMine 公司简介我这边使用RubyMine 的理由RubyMine 2023.3 最新变化AI Assistant 正式版对 AI 生成名称建议的支持改进了 Ruby 上下文单元测试生成 RailsRails 应用程序和引擎的自定义路径Rails 路径的自动导入对存储在默认位置之外的模型、控制器和邮件器的代码洞…

云计算中仲裁节点和仲裁可用区介绍

在云计算中&#xff0c;仲裁是指当多个节点或实例之间发生争议或冲突时&#xff0c;由一个独立的第三方机构或节点来解决争议或冲突的过程。仲裁通常用于解决云计算中的资源分配、数据一致性、服务质量等问题。 仲裁的作用主要有以下几点&#xff1a; 1. 保证资源分配的公平性…