合理的使用批量插入、更新对优化有很大的作用,速度明显快了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. 在 Mac OS X 10.10 安装 pyenv 的一个小坑

    小记一下. 因为全面转向 Python 3.4 作为主力开发版本,但是手上的 Mac OS X 和服务器上用的都是 Python 2.7,所以需要安装 pyenv. 按其 github 页面的说明,使 ...

  2. FORM开发之键性弹性域开发

    1.创建表时带有键弹性域字段 SUMMARY_FLAG VARCHAR2(1) , /* 必须有此字段 */ ENABLED_FLAG VARCHAR2(1) , /* 必须有此字段 */ START ...

  3. Google Dremel数据模型详解(上)

    首先简单介绍一下Dremel是什么,能解决什么问题.第二部分着重讲Dremel的数据模型,即数据结构.第三部分将谈一下在此数据结构上设计的算法. 1 起源 Dremel的数据模型起源于分布式系统的应用 ...

  4. Anakia 转换xml文档为其他格式

    一.简介 Anakia 使用JDOM 和Velocity将XML文档转换为特定格式的文档 二.解析xml文档方法 1.DOM java jdk,xml-api.jar 需要加载整个xml文档来构建层次 ...

  5. C控制台实现模拟平抛运动算法

    平抛运动这个相信读了高中物理都知道这个概念了,详细的我就不说了,不明白的看看百度: 平抛运动 接下来看看用控制台实现的平抛运动算法: #include <stdio.h> #include ...

  6. 剑指offer面试题5 从头到尾打印链表(c)

  7. 3.QT数据库综合案例,模糊查询等操作

     1 新建一个项目: Database01.pro SOURCES += \ main.cpp \ Contact.cpp QT += gui widgets sql CONFIG += C++1 ...

  8. Microsoft Dynamics CRM2011 更换Logo

    之前操作过但没做过记录,这里记录下以防以后有需要时记不起来还有迹可循 IE收藏栏的图标,在网站根目录下的的/favicon.ico CRM网页中的Logo,替换/_imgs/crmmastheadlo ...

  9. Cocos2D中Node的userObject实例变量使用时一个要注意的地方

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在Cocos2D中,CCNode对象有一个ivar为us ...

  10. Android 6.0 运行时权限处理问题

    序 自从升级到Android M以来,最大的改变就是增加了运行时权限RuntimePermission,6.0以上的系统如果没有做适配,运行了targetSDK=23的App时就会报权限错误.我们知道 ...