从零开始SpringCloud Alibaba实战(63)——Mybatis批量插入,更新数据

本文探讨了在MySql数据库中,使用Mybatis进行数据插入和更新的三种不同方式:常规for循环、Mybatis的批量模式以及使用foreach进行批量插入。实验结果显示,使用foreach批量插入的方法耗时最短,效率最高,其次是Mybatis的批量模式,而常规for循环插入耗时最长。这些发现对于优化大数据量的数据库操作具有指导意义。
摘要由CSDN通过智能技术生成

数据库为MySql。

for循环insert,update

		long start = System.currentTimeMillis();
		for(int i = 0 ;i < 100000; i++) {
			User user = new User();
			user.setId("id" + i);
			user.setName("name" + i);
			user.setPassword("password" + i);
			userMapper.insert(user);
		}
		long end = System.currentTimeMillis();
        System.out.println("---------------" + (start - end) + "---------------");

    <insert id="insert">
      INSERT INTO t_user (id, name, password)
          VALUES(#{id}, #{name}, #{password})
    </insert>

时间为380826ms

此种方法批量数据禁止使用

Mybatis batch模式

	SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//跟上述sql区别
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			User user = new User();
			user.setId("id" + i);
			user.setName("name" + i);
			user.setPassword("password" + i);
			userMapper.insert(user);
		}
		sqlSession.commit();
		long end = System.currentTimeMillis();
		System.out.println("---------------" + (start - end) + "---------------");

    <insert id="insert">
      INSERT INTO t_user (id, name, password)
          VALUES(#{id}, #{name}, #{password})
    </insert>

时间为203660ms

批量更新

<foreach collection="attendingUsrList" item="model"  separator=";">
    UPDATE parties SET attending_user_count = #{model.attending_count}
    WHERE  fb_party_id = #{model.eid}  
</foreach>

3.批量foreach插入

      long start = System.currentTimeMillis();
		List<User> userList = new ArrayList<>();
		for (int i = 0; i < 100000; i++) {
			User user = new User();
			user.setId("id" + i);
			user.setName("name" + i);
			user.setPassword("password" + i);
			userList .add(user);
		}
		userMapper.insertBatch(userList);
		long end = System.currentTimeMillis();
		System.out.println("---------------" + (start - end) + "---------------");

<insert id="insertBatch">
        INSERT INTO t_user
        (id, name, password)
        VALUES
        <foreach collection ="userList" item="user" separator =",">
            (#{id}, #{name}, #{password})
        </foreach >
    </insert>

时间为8706ms

结论:foreach批量插入 > mybatis batch模式插入 > for循环insert

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值