合理的使用批量插入、更新对优化有很大的作用,速度明显快了N倍。
数据库连接串后面要新增:&allowMultiQueries=true
批量插入的最大限制主要是看你整条sql占用的大小,所以可以根据自身sql长度的大小来配置这个要分批的每批的个数
1. 批量插入
Dao
1
2
3
public Integer saveStudents(List<Student>
students) {
        return super.getSqlSession().insert("StudentMapper.insertStudents",
students);
    }
Mapper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<insert id="insertStudents" parameterType="java.util.List">
    insert into t_student(
        city_id
    )
    values
    <foreach collection="list" item="itm" index="index" separator=",">
        (
        #{itm.city_id}
        )
    </foreach>
</insert>

2. 批量更新
Dao
1
2
3
public Integer updateStudents(List<Student>
students) {
    return super.getSqlSession().update("StudentMapper.updateStudents",
students);
}
Mapper
1
2
3
4
5
6
7
8
9
10
11
12
13
<update id="updateStudents" parameterType="java.util.List">
    <foreach collection="list" item="item" index="index" open=""
        close="" separator=";">
        UPDATE t_studnet
        <set>
            <if test="item.name
!= null"
>
                name= #{item.name}
            </if>
        </set>
        WHERE id
= #{item.id}
        AND age
= #{item.age}
    </foreach>
</update>

List分批的工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * 分批list
 
 * @param sourceList
 *            要分批的list
 * @param batchCount
 *            每批list的个数
 * @return List<List<Object>>
 */
public static List<List<?>> batchList(List<?> sourceList, int batchCount) {
    List<List<?>> returnList = new ArrayList<>();
    int startIndex = 0// 从第0个下标开始
    while (startIndex < sourceList.size()) {
        int endIndex = 0;
        if (sourceList.size() - batchCount < startIndex) {
            endIndex = sourceList.size();
        else {
            endIndex = startIndex + batchCount;
        }
        returnList.add(sourceList.subList(startIndex, endIndex));
        startIndex = startIndex + batchCount; // 下一批
    }
    return returnList;
}

Mybatis批量插入、批量更新的更多相关文章

  1. mybatis 注解的方式批量插入,更新数据

    一,当向数据表中插入一条数据时,一般先检查该数据是否已经存在,如果存在更新,不存在则新增  使用关键字  ON DUPLICATE KEY UPDATE zk_device_id为主键 model  ...

  2. mybatis中批量插入以及更新

    1:批量插入 批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行 <insert id="batchInsert" parameterType="java ...

  3. java批量插入或更新的问题

    在批量插入或者更新中,setXXX的时候字段类型必须一致.例如:在普通sql中 pstmt8.setBigDecimal(j ,xxx);可以写成pstmt8.setString(j,xxx.toSt ...

  4. C#使用SqlDataAdapter 实现数据的批量插入和更新

    近日由于项目要求在需要实现中型数据的批量插入和更新,晚上无聊,在网上看到看到这样的一个实现方法,特摘抄过来,以便以后可能用到参考. 一.数据的插入 DateTime begin = DateTime. ...

  5. MySQL on duplicate key update 批量插入并更新已存在数据

    业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...

  6. Mybatis中实现oracle的批量插入、更新

    oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ...

  7. 【mybatis】mybatis中批量插入 批量更新 batch 进行insert 和 update,或者切割LIst进行批量操作

    ================================================================== 分别展示 mybatis 批量新增  和 批量更新   的操作: ...

  8. Mybatis 批量插入和更新小例

    SpringBoot配置Mybatis前文有博文,数据库mysql: package com.example.demo.biz.dto; public class User { private int ...

  9. MyBatis动态批量插入、更新Mysql数据库的通用实现方案

    一.业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方, ...

  10. Oracle+Mybatis批量插入,更新和删除

    1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...

随机推荐

  1. PGM:概率论基础知识

    http://blog.csdn.net/pipisorry/article/details/52459847 概率图模型PGM:概率论基础知识 独立性与条件独立性 独立性 条件独立性 也就是表示给定 ...

  2. EJB3基本概念、运行环境、下载安装与运行jboss

    EJB3基本概念 什么是EJB: EJB(EnterpriceJavaBeans)是一个用于分布式业务应用的标准服务端组件模型.采用EJB架构编写的应用是可伸的.事务性的.多用户安全的.采用EJB编写 ...

  3. Erlang application stop 调用死锁

    Erlang application stop 调用死锁(金庆的专栏)在application行为模块的start()中启动bson应用,在stop()中停止bson,结果application:st ...

  4. 分布式缓存GemFire架构介绍

    1什么是GemFire GemFire是一个位于应用集群和后端数据源之间的高性能.分布式的操作数据(operational data)管理基础架构.它提供了低延迟.高吞吐量的数据共享和事件分发.Gem ...

  5. EBS值集,弹性域常用表

      值集 select * from fnd_flex_value_sets select * from fnd_flex_values select * from fnd_flex_valu ...

  6. EBS各个应用简称

     模块全称 Banking Center 模块简称 FPT 服务器目录 FPT_TOP Billing Connect CUE CUE_TOP CADView-3D DDD DDD_TOP CPG ...

  7. 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

    在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...

  8. javascript之正则表达式

    创建正则表达式的两种方法 显式: new RegExp("pattern"[,"flags"]); 例 var regex = new ("abc&q ...

  9. C++ string类型占几个字节

          在C语言中我们操作字符串肯定用到的是指针或者数组,这样相对来说对字符串的处理还是比较麻烦的,好在C++中提供了 string 类型的支持,让我们在处理字符串时方便了许多.这篇文章并不是讲解 ...

  10. 04 AutoCompleteTextView

    作用:输入部分文字跳处下拉框列出相应的条目 <pre name="code" class="html"> <!-- 当文本框出现两个字符才开始 ...