首先推荐使用PreparedStatement的批量处理操作。

   Connection conn = null;
PreparedStatement stmt = null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL,USER,PASS); String SQL = "INSERT INTO Employees(id,first,last,age) " +
"VALUES(?, ?, ?, ?)"; stmt = conn.prepareStatement(SQL); conn.setAutoCommit(false);
    //数据量多的 可以使用for循环批量
stmt.setInt( 1, 400 );
stmt.setString( 2, "Python" );
stmt.setString( 3, "Zhang" );
stmt.setInt( 4, 33 );
stmt.addBatch(); stmt.setInt( 1, 401 );
stmt.setString( 2, "C++" );
stmt.setString( 3, "Huang" );
stmt.setInt( 4, 31 );
stmt.addBatch();
int[] count = stmt.executeBatch();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
或类似于
  1. PreparedStatement ps = conn.prepareStatement(
  2. "INSERT into employees values (?, ?, ?)");
  3. for (n = 0; n < 100; n++) {
  4. ps.setString(name[n]);
  5. ps.setLong(id[n]);
  6. ps.setInt(salary[n]);
  7. ps.addBatch();
  8. }

删除的,类似。

其次,使用下面的方式:

1.批量新增

int count = list.size() / 500; //自己定义一次批量处理条数(不要太高,我这边遇到批量超过20000条,速度明显变慢,批量15w等的急死,如果太大的话,还有可能超过mysql默认的最大长度1M的限制)
int remainder = list.size() % 500;
List<Map<String, String>> oneSubmit = null;
for(int i = 0; i<= count; i++) {
  if(i == count) {
    if(remainder > 0) {
    oneSubmit = list.subList(500*i, 500*i+remainder);
    ceShiDao.batchInsertZztContactTmp(oneSubmit);
    }
  }else {
    oneSubmit = list.subList(500*i, 500*(i+1));
    ceShiDao.batchInsert(oneSubmit);
  }
} @Insert({"<script>",
"insert into xxx (file_name, file_id, user_id, phone,create_user_id,update_user_id,status,params) values ",
"<foreach collection='list' item='item' separator=','>",
" (#{item.fileName},",
" #{item.fileId},",
" #{item.userId},",
" #{item.phone},",
" #{item.createUserId},",
" #{item.updateUserId},",
" #{item.status},",
" #{item.params})",
"</foreach>",
"</script>"})
int batchInsert(@Param("list") List<Map<String, String>> list);

2.批量删除

int count = contactIdList.size() / 500;
int remainder = contactIdList.size() % 500;
List<Integer> oneSubmit = null;
for(int i = 0; i<= count; i++) {
  if(i == count) {
    if(remainder > 0) {
      oneSubmit = contactIdList.subList(500*i, 500*i+remainder);
      ceShiDao.batchDelete(oneSubmit);
    }
  }else {
    oneSubmit = contactIdList.subList(500*i, 500*(i+1));
    ceShiDao.batchDelete(oneSubmit);
  }
} @Delete({"<script>",
"delete from xxx",
"where tmp_contact_id in ",
" <foreach collection='list' item='item' open='(' separator=',' close=')'>",
" #{item}",
" </foreach>",
"</script>"
})
int batchDelete(@Param("list") List<Integer>list);

mysql批量新增和批量删除的更多相关文章

  1. mybatis 注解形式设置批量新增、批量更新数据

    1. 批量更新: @Update({"<script>" + "<foreach collection=\"smsConfigTemplate ...

  2. 基于JQuery easyui,gson的批量新增/修改和删除-servlet版

    最近项目需要用到在页面进行批量操作,做了一些这方面的学习,参照网上的资料写了个小例子,记录一下: 准备 引入gson-2.6.2.jar,这里使用gson而不使用json-lib,原因是json-li ...

  3. MyBatis基础入门《十三》批量新增数据

    MyBatis基础入门<十三>批量新增数据 批量新增数据方式1:(数据小于一万) xml文件 接口: 测试方法: 测试结果: =============================== ...

  4. mybatis,批量新增、修改,删除

    转载自:http://blog.csdn.net/sanyuesan0000/article/details/19998727 最近需要用到Mybatis批量新增oracle数据库,刚开始在网上找到的 ...

  5. mybatis学习之路----mysql批量新增数据

    原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...

  6. MYSQL-JDBC批量新增-更新-删除

    目录 1 概述 2 开启MYSQL服务端日志 3 深入MYSQL/JDBC批量插入 3.1 从一个例子出发 3.2 JDBC的批量插入操作 3.3 两个常被忽略的问题 3.5 误区 4 MYSQL/J ...

  7. MySQL根据表前缀批量修改、删除表

    注意:请先调试好,以及做好备份,再执行操作. 批量修改表 批量给前缀为 xushanxiang_content_ 的表增加一个 username 的字段: SELECT CONCAT('ALTER T ...

  8. mybatis 批量新增-批量修改-批量删除操作

    mapper.xml <!-- 批量新增 --> <insert id="saveBatch" parameterType="java.util.Lis ...

  9. EntityFramework进阶(四)- 实现批量新增

    本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 我们可以结合Ado.Net的SqlBulkCopy实现SqlServer数据库的批量新增,其他类型的数据库的批量 ...

随机推荐

  1. [Cometoj#3 A]比赛_枚举/堆

    比赛 题目链接:https://cometoj.com/contest/38/problem/A?problem_id=1534 数据范围:略. 题解: 原题没啥意思,就是个暴力枚举. 出了个加强版, ...

  2. (二十四)JDBC应用的事务管理(转账事例)

    目录 利用 Dbutils 进行事务操作(以转账为例) 转账实现方式(不优雅的方式) ThreadLocal 类 转账实现方式(优雅的方式) 利用 Dbutils 进行事务操作(以转账为例) 我们只在 ...

  3. Pygame小游戏练习三

    @Python编程从入门到实践 Python项目练习 七.创建Passenger类 创建passenger.py文件,创建Passenger类,控制乘客属性和行为 # passenger.py imp ...

  4. PHP接收前端传值各种情况整理

    PHP接收前端传值各种情况整理 服务端代码: header('Access-Control-Allow-Origin:*'); var_dump($_POST); exit; 情况 1) 传null ...

  5. Spring实战(五)Spring中条件化地创建bean

    1.@Conditional 为生成bean设置条件 Spring 4中引入了一个新的注解---@Conditional,它用在有@Bean的方法上. 如果给定条件计算结果为true,Spring会创 ...

  6. 数据库设计规范、E-R图、模型图

    (1)数据库设计的优劣: 糟糕的数据库设计: ①数据冗余冗余.存储空间浪费. ②数据更新和插入异常. ③程序性能差. 良好的数据库设计 ①节省数据的存储空间. ②能够保证数据的完整新. ③方便进行数据 ...

  7. C#从服务器下载文件的四种方式

    //方法一:TransmitFile实现下载 string fileName = "ss.docx"; //客户端预设的文件名,导出时可修改  string filePath = ...

  8. 关键字:for_each

    std::for_each 先贴cppreference中对for_each的概述: template< class InputIt, class UnaryFunction > //此处 ...

  9. Dubbo相关的基础

    Dubbo是一款高性能轻量级的java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务注册与发现. Dubbo是阿里开源的一个项目,现在已经是Apache的顶级 ...

  10. LeetCode 腾讯精选50题--二叉树的最大深度

    求二叉树的最大深度, 基本思路如下: 设定一个全局变量记录二叉树的深度,利用递归,没遍历一层都将临时深度变量+1,并在每一节点递归结束后判断深度大小. 具体代码如下: package algorith ...