mybatis + mysql 高性能批量插入和批量更新

本文介绍了如何使用mybatis和MySQL进行批量插入和更新操作,通过批量处理提升性能。批量插入和更新的基本原理是拼接SQL,减少数据库连接次数。在mybatis中,可以通过配置mapper实现自动拼接SQL。对于批量更新,利用了MySQL的`cas ... when ... then`特性。同时,文章也指出了批量处理的缺点,如事务回滚可能导致所有数据丢失,以及SQL长度限制问题。为解决这些问题,建议按批次处理数据和调整`max_allowed_packet`参数。
摘要由CSDN通过智能技术生成

批量插入和批量更新的原理:把多条sql拼接为一条。

材料准备:测试表 test1

-- 测试表 test1
CREATE TABLE `test1` (
  `id` int(14) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `remark1` varchar(50) DEFAULT NULL,
  `remark2` varchar(50) DEFAULT NULL,
  `remark3` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

一、批量插入

例如:要插入3条数据,那么非批量的插入数据,执行sql分别为:

insert into test1(id,name,remark1,remark2,remark3) 
    values(1,'sb','rmk11','rmk12','rmk13');

insert into test1(id,name,remark1,remark2,remark3) 
    values(2,'sb','rmk21','rmk22','rmk23');

insert into test1(id,name,remark1,remark2,remark3) 
    values(3,'sb','rmk33','rmk32','rmk33');

我们可以将以上的3条sql转变为1条sql:

insert into test1(id,name,remark1,remark2,remark3) 
VALUES
(1,'sb','rmk11','rmk12','rmk13'),
(2,'sb','rmk21','rmk22','rmk23'),
(3,'sb','rmk33','rmk32','rmk33');

这样就只需要连接一次数据库,并且执行一条sql就可以插入多条数据了。


当然我们如果使用了mybatic,那么在插入多条数据的时候,不需要自己拼接sql,mybatis可以帮我们拼接。


TestBatchService 中的方法只需要把,需要插入的数据放入一个集合List中,然后直接调用mapper方法。

public void testInsertBatch() {

        List<Test1> list = new ArrayList<>();
        for (int i=0;i<10000;i++){
            //拼装测试数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值