当前位置: 首页 > news >正文

MySql 及MyBatis数据的批量操作

1、Mybatis操作

1、批量更新

  <update id="updateCtcc" parameterType="java.util.List">update ctcc set scan=1 where id in<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">${item.id}</foreach></update>

以上是批量更新的正确方式,测试下来80000条数据只需要不到一分钟
而使用case when方式就卡住不动了,如下:

 <update id="updateCtccCase" parameterType="java.util.List">update ctccset scan =<foreach collection="list" item="item" index="index"separator=" " open="case ID" close="end">when id=#{item.id} then 1</foreach></update>

还有一种方式,单条更新,如下:

    <update id="updateCtcc" parameterType="java.util.Map">separator=";" 代表着每次循环完,在sql后面放一个分号item="xml" 循环List的每条的结果集collection="list" list 即为 map传过来的参数key --><foreach collection="list" separator=";" item="cus">update ctcc setscan = 1where id = #{xml.id}</foreach></update>

这种方式操作下来会报错,不知道为啥,至于报的什么错误,已经记不得了

2、批量处理

1、批量插入两种方式

<insert id="insertBatch">INSERT INTO persons(id, name, sex)VALUES<foreach collection ="list" item="user" separator =",">(#{user.id}, #{user.name}, #{user.sex})</foreach >
</insert>

mybatis三种批量插入方式对比

文件导入
jdbc批处理

绝对干货,教你4分钟插入1000万条数据到mysql数据库表

JAVA向Mysql插入亿级别数据—测评

关于批量插入数据之我见(100万级别的数据,mysql)

MySQL大数据量分页查询方法及其优化

字符串截取
MySQL字符串函数substring:字符串截取

Incorrect string value: ‘\xE5\x8C\x97\xE4\xBA\xAC’ for column

通过把输入值赋予一个用户变量,同时不把变量赋予表中的列,来丢弃此输入值:

LOAD DATA INFILE 'file.txt'  INTO TABLE t1  (column1, @dummy, column2, @dummy, column3); 

这样file.txt中的第二列和第四列不被导入到t1表中
https://blog.csdn.net/etimechen/article/details/50521636

  String esquel = " LOAD DATA LOCAL INFILE '" + path +"' INTO TABLE rp_cre_data_mobile_track_ctcc_copy " +" FIELDS TERMINATED BY ',' ENCLOSED BY \'\"'" +" LINES TERMINATED BY \'\\n\' (mobile_id,secret_mobile,create_time,mark,test)";jdbcTemplate.update(esquel);
public void loadDataFromJava(final List<TrackTest> urlList) {String sql = "insert into rp_cre_data_mobile_track_ctcc_copy(mobile_id,secret_mobile,create_time,mark,test) values(?,?,?,?,?)";jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {public void setValues(PreparedStatement ps, int i) throws SQLException {long mobileId = urlList.get(i).getMobileId();String secret_mobile = urlList.get(i).getMmd5();long createTime = urlList.get(i).getCreateTime();int mark = urlList.get(i).getMark();int test = urlList.get(i).getTest();ps.setLong(1, mobileId);ps.setString(2, secret_mobile);ps.setLong(3, createTime);ps.setInt(4, mark);ps.setInt(5, test);}public int getBatchSize() {return urlList.size();}});}
public static void insert() {Connection conn = null;PreparedStatement pstm = null;// 开时时间Long begin = new Date().getTime();try {//加载jdbc驱动Class.forName("com.mysql.jdbc.Driver");//连接mysqlconn = DriverManager.getConnection(url, user, password);// sql前缀String prefix = "INSERT INTO rp_cre_data_mobile_track_ctcc(mobile_id,mmd5,create_time,mark,test) VALUES";// 保存sql后缀StringBuffer suffix = new StringBuffer();// 设置事务为非自动提交conn.setAutoCommit(false);// Statement st = conn.createStatement();// 比起st,pst会更好些PreparedStatement pst = conn.prepareStatement("");// 外层循环,总提交事务次数long unixTime = System.currentTimeMillis() / 1000L;for (int i = 1; i <= 100; i++) {// 第次提交步长   SYSDATE(),long bTime = System.currentTimeMillis();for (int j = 1; j <= 100000; j++) {// 构建sql后缀String result = "(" + j * i + ", '"+Utils.MD5(j * i + "#6s3k")+"', "+unixTime + ",0,1),";suffix.append(result);}// 构建完整sqlString sql = prefix + suffix.substring(0, suffix.length() - 1);// 添加执行sqlpst.addBatch(sql);// 执行操作pst.executeBatch();// 提交事务conn.commit();long aTime = System.currentTimeMillis();System.out.println("成功插入第" + i * 10 + "W条数据耗时:" + (aTime - bTime));// 清空上一次添加的数据suffix = new StringBuffer();}// 头等连接pst.close();conn.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}// 结束时间Long end = new Date().getTime();// 耗时System.out.println("cast : " + (end - begin) / 1000 + " s");}

以上也可以改成这样

 String sql = "insert into rp_cre_data_mobile_track_ctcc(mobile_id,mmd5,create_time,mark,test) values(?,?,?,?,?)";//预编译sqlpstm = conn.prepareStatement(sql);//开始总计时long bTime1 = System.currentTimeMillis();//循环500次,每次十万数据,一共5000万for (int i = 0; i < 500; i++) {//开启分段计时,计1W数据耗时long bTime = System.currentTimeMillis()/ 1000L;//开始循环while (begin < end) {//赋值pstm.setLong(1, (i+1)*begin);pstm.setString(2, Utils.MD5((i+1)*begin + "#6s3k"));pstm.setLong(3, bTime);pstm.setInt(4, 0);pstm.setInt(5, 1);//添加到同一个批处理中pstm.addBatch();begin++;}//执行批处理pstm.executeBatch();
//                //提交事务conn.commit();//边界值自增10Wend += 100000;//关闭分段计时long eTime = System.currentTimeMillis()/ 1000L;//输出System.out.println("成功插入第" + (i + 1) * 10 + "W条数据耗时:" + (eTime - bTime));}

相关文章:

MySql 及MyBatis数据的批量操作

1、Mybatis操作 1、批量更新 <update id"updateCtcc" parameterType"java.util.List">update ctcc set scan1 where id in<foreach collection"list" item"item" index"index" open"(" close")&qu…...

无代码表格数据库——一个企业数字化新物种

商业活动的“非标”地带在现实商业活动中存在大量未被明确界定、规范和标准化的灰色地带&#xff0c;它们不像电信、金融、财会、证券经纪、保险、建筑设计、工程造价等具有高度专业性的业务板块一样有强制的行业标准、规范甚至从业资格证书加持&#xff0c;下文统称其为非标业…...

第十三届蓝桥杯国赛 C++ C组 F 题、Python B组 E 题——近似GCD(AC)

目录1.近似GCD1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.C2.Python1.近似GCD 1.题目描述 小蓝有一个长度为 nnn 的数组 A(a1,a2,⋯,an)A\left(a_{1}, a_{2}, \cdots, a_{n}\right)A(a1​,a2​,⋯,an​), 数组的子数组被定…...

分享5款小众良心软件,好用到让人惊艳

目前win7渐渐退出视野&#xff0c;大部分人都开始使用win10了&#xff0c;笔者在日常的工作和使用中&#xff0c;为了能够让效率的大提升&#xff0c;下载了不少软件&#xff0c;以下的软件都是个人认为装机必备&#xff0c;而且都是可以免费下载&#xff0c;且没有插件的。 1…...

WAF是什么?一篇文章带你全面了解WAF

WAF是什么&#xff1f;一篇文章带你全面了解WAF 文章目录WAF是什么&#xff1f;一篇文章带你全面了解WAFWAF是什么&#xff1f;一、WAF的工作原理二、WAF的分类三、WAF的特点四、如何选择和部署WAFWAF是什么&#xff1f; Web应用程序防火墙&#xff08;Web Application Firewa…...

django项目实战八(django+bootstrap实现增删改查)进阶验证码

目录 一、安装第三方 1、pillow 2、第三方字体文件 二、实现生成验证码 1、创建code.py 2、url 3、修改auth.py 4、修改account.py 5、修改login.html 三、验证码校验 1、验证码写入到session 2、修改form下的LoginForm类新增code字段 3、修改login.html 4、修改acco…...

IP 协议

1.IP协议报头如下图:版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bi…...

好用的SQL工具盘点:从学习到工作总有一款适合你

标题一.入坑阶段&#xff08;学习入门&#xff09;&#xff1a; 这个阶段一般就是小白&#xff0c;想学习SQL语言&#xff0c;然后到处找软件&#xff0c;找免费破解版找半天&#xff0c;找到了半天安装不下来&#xff0c;还可能把自己电脑搞中毒。 其实对于小白来说&#xf…...

Memcache介绍

Memcache介绍 Memcache是一个分布式内存对象缓存系统&#xff0c;其功能是为应用程序提供快速和可伸缩的数据存储。memcache使用简单&#xff0c;定义了相对少数几种操作&#xff08;set&#xff0c;add&#xff0c;replace&#xff0c;get&#xff0c;flush_all等&#xff09…...

PTA:C课程设计(1)

山东大学&#xff08;威海&#xff09;2022级大一下C习题集&#xff08;1&#xff09;1-7-1 求幂级数展开的部分和1-7-2 查询水果价格1-7-3 猜数字游戏1-7-4 特殊a串数列求和1-7-5 成绩统计分析表1-7-6 换硬币1-7-7 验证“哥德巴赫猜想”1-7-1 求幂级数展开的部分和 #include&…...

第二十篇 ResNet——模型讲解

​ 摘要 ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常明显。 模型的创新点在于提出残差学习的思…...

LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解

LeetCode经典算法题&#xff1a;矩阵中省份数量经典题目三角形最大周长java多种解法 文章目录1 省份数量题目描述解题思路与代码解法一&#xff1a;深度优先解法二&#xff1a;广度优先解法三&#xff1a;并查集2 三角形的最大周长题目描述解题思路与代码贪心算法&#xff1a;1…...

Vue3通透教程【一】Vue3现状—必然趋势?

文章目录&#x1f31f; 专栏介绍&#x1f31f; Vue默认版本&#x1f31f; 拥抱Vue3的UI&#x1f31f; Vue3显著优势&#x1f31f; 小彩蛋&#x1f31f; 写在最后&#x1f31f; 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相…...

打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践

福建纵腾网络有限公司&#xff08;简称“纵腾集团”&#xff09;成立于 2009 年&#xff0c; 以“全球跨境电商基础设施服务商”为企业定位&#xff0c;聚焦跨境仓储与物流&#xff0c; 为全球跨境电商商户、出口贸易企业、出海品牌商提供海外仓储、商业专线物流、定制化物流等…...

什么是真正的骨传导耳机,骨传导耳机原理

骨传导耳机大多采用后挂耳/夹耳佩戴方式&#xff0c;但现在很多人分不清哪些是骨传导耳机&#xff0c;哪些是气传导耳机。看完这篇教会你辨别哪些是真正的骨传导耳机。 骨传导耳机采用固体传声方式&#xff0c;整个耳机机身都没有传声音孔的设计&#xff0c;主要通过耳机振子发…...

[MySQL]基本数据类型及表的基本操作

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 MySQL 数据库常用的数据类型&#xff0c;数据表的基本操作&#xff1a;创建、删除、修改表&#xff0c;针对修改表的结构进行了讲解&#xff0c;随后是如何向数据表中添加数据&#xff0c;浅浅…...

华为OD机试 - 好朋友(Python) | 机试题+算法思路+考点+代码解析 【2023】

好朋友 题目 在学校中 N个小朋友站成一队 第i个小朋友的身高为height[i] 第i个小朋友可以看到第一个比自己身高更高的小朋友j 那么j是i的好朋友 (要求:j > i) 请重新生成一个列表 对应位置的输出是每个小朋友的好朋友的位置 如果没有看到好朋友 请在该位置用0代替 小朋友…...

SAP ABAP用程序给用户增加SAP_ALL权限

给用户增加SAP_ALL的权限&#xff0c;报表可对basis与abap开发人员对用户权限管理的思路&#xff0c;谢绝用于其它用途&#xff0c;后果自负。 REPORT ZTESTCREATEUSER. data: l_USR04 LIKE USR04 , l_UST04 LIKE UST04 , l_PROFS LIKE USR04-PROFS , l_…...

stm32f407探索者开发板(二十)——独立看门狗实验

文章目录一、独立看门狗概述1.1 独立看门狗二、常用寄存器和库函数配置2.1 独立看门狗框图2.2 键值寄存器IWDG_KR2.3 预分频寄存器IWDG_PR2.4 重装载寄存器IWDG_RLR2.5 状态寄存器IWDG_SR2.6 IWDG独立看门狗操作库函数三、手写独立看门狗实验3.1 操作步骤3.2 iwdg.c3.3 iwdg.h3…...

C语言进阶(五)—— 多维数组

1. 一维数组 元素类型角度&#xff1a;数组是相同类型的变量的有序集合内存角度&#xff1a;连续的一大片内存空间在讨论多维数组之前&#xff0c;我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。1.1 数组名考虑下面这些声明&#xff1a;int a; int b[10];我们…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...