使用mybatis-plus开发中会遇到数据量多的情况下,插入和修改效率低,主要原因是“新增“和“修改”方法是对一条数据进行处理的,如果有一万条数据就会和数据库交互一万次所以效率就低。如何提高效率就需要批量操作,如下展示批量插入和批量修改的代码,数据库使用mysql。

1、建表语句

CREATE TABLE yc_test_t  (
id int COMMENT '主键ID',
name VARCHAR(40) COMMENT '姓名',
note VARCHAR(100) COMMENT '备注',
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='测试';

2、实体类

package com.example.demo.domain;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; /**
* <p>
* 测试表。
* </p>
*
* @author yc
* @since 2024-09-03
*/
@TableName(value = "yc_test_t")
public class YcTestT {
private static final long serialVersionUID = 1L; /**
* ID。
*/
@TableId
private Integer id;
/**
* 姓名。
*/
private String name;
/**
* 备注。
*/
private String note; public void setId(Integer id) {
this.id = id;
} public Integer getId() {
return id;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setNote(String note) {
this.note = note;
} public String getNote() {
return note;
} }

3、mapper类

package com.example.demo.mapper;

import com.example.demo.domain.YcTestT;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; /**
* <p>
* 测试表 Mapper 接口。
* </p>
*
* @author yc
* @since 2024-09-03
*/
public interface YcTestTMapper extends BaseMapper<YcTestT> { }

4、接口

package com.example.demo.service;

import com.example.demo.domain.YcTestT;
import com.baomidou.mybatisplus.extension.service.IService; import java.util.Collection; /**
* <p>
* 测试表 服务类。
* </p>
*
* @author yc
* @since 2024-09-03
*/
public interface IYcTestTService extends IService<YcTestT> {
//批量插入
boolean saveBatch(Collection<YcTestT> entityList); /**
* 批量更新。
* @param oldNote 旧
* @param newNote 新
* @return status
*/
boolean updateBatch(String oldNote,String newNote); /**
* 单记录新增测试表。
*
* @param ycTestT 参数说明
* @return status
*/
int insert(YcTestT ycTestT); }

5、接口实现

package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.example.demo.domain.YcTestT;
import com.example.demo.mapper.YcTestTMapper;
import com.example.demo.service.IYcTestTService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired; import java.util.Collection; /**
* <p>
* 测试表 服务实现类。
* </p>
*
* @author yc
* @since 2024-09-03
*/
@Service
public class YcTestTServiceImpl extends ServiceImpl<YcTestTMapper, YcTestT> implements IYcTestTService {
@Autowired
YcTestTMapper ycTestTMapper; //批量插入
@Override
public boolean saveBatch(Collection<YcTestT> entityList) {
return super.saveBatch(entityList);
} /**
* 批量更新。
* @param oldNote 旧
* @param newNote 新
* @return status
*/
@Override
public boolean updateBatch(String oldNote,String newNote) {
// 创建 UpdateWrapper 实例
UpdateWrapper<YcTestT> updateWrapper = new UpdateWrapper<>();
// 设置更新条件,例如根据 userId 更新
updateWrapper.lambda().eq(YcTestT::getNote, oldNote);
// 设置需要更新的字段值
updateWrapper.set("note",newNote); // 调用 update 方法进行批量更新
return this.update(updateWrapper);
} /**
* 单记录新增测试表。
*
* @param ycTestT 参数说明
* @return status
*/
@Override
public int insert(YcTestT ycTestT) {
return ycTestTMapper.insert(ycTestT);
} }

6、控制类

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.service.IYcTestTService;
import com.example.demo.domain.YcTestT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import java.util.ArrayList;
import java.util.List; /**
* <p>
* 测试表 前端控制器。
* </p>
*
* @author yc
* @since 2024-09-03
*/ @RestController
@RequestMapping("/test")
public class YcTestTController { @Autowired
private IYcTestTService ycTestTService; /**
* 批量插入。
*
* @return AjaxResult
*/
@PostMapping(value = "/saveBatch")
@ResponseBody
public String saveBatch() { List<YcTestT> list = new ArrayList<>();
for (int i = 0; i < 5000; i++) {
YcTestT ycTestT = new YcTestT();
ycTestT.setId(i);
ycTestT.setName("张三" + (i + ""));
ycTestT.setNote("旧");
list.add(ycTestT);
if ((i + 1) % 3000 == 0) {
try {
ycTestTService.saveBatch(list);
} catch (Exception e) {
// 批量插入失败,改为单条插入
for (int j = 0; j < list.size(); j++) {
try {
YcTestT testT = list.get(j);
//单条插入
ycTestTService.insert(testT);
} catch (Exception ex) {
ex.printStackTrace();
}
}
} finally {
list.clear();
}
}
}
//处理除3000余数的数据
if (list.size() >= 1) {
ycTestTService.saveBatch(list);
} return "批量插入成功!";
} @PostMapping(value = "/updateBatch")
@ResponseBody
public String updateBatch() {
ycTestTService.updateBatch("旧","新");
return "批量更新成功!";
} }

7、postman接口

批量插入:http://127.0.0.1:8080/test/saveBatch

批量修改:http://127.0.0.1:8080/test/updateBatch

8、效果-后台执行的更新效果是一次批量更新

  源码获取方式(免费):

(1)登录-注册:http://resources.kittytiger.cn/

(2)签到获取积分

(3)搜索:mybatis-plus批量增加-修改样例

(4)文件列表

mybatis-plus批量增加、批量修改样例+建表语句+postman接口的更多相关文章

  1. mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询

    1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...

  2. c#调用存储过程实现批量增加和修改数据

    1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新 ...

  3. Oracle 批量增加 / 批量跟新

    在使用oracl过程中踩到好多坑,在此记录,也分享给大家. 第一:批量插入 代码一(在为明确表和字段的情况下,动态批量增加): @Insert("<script> " ...

  4. Mysql批量删除和修改某个前缀的表

    1.批量删除某个前缀的表名,首先选出这些个表. select concat( 'drop table ', table_name, ';' ) from information_schema.tabl ...

  5. 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句

    1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write ...

  6. 批量导出hive表的建表语句

    转的这里的 首先先导出所有的table表 hive -e "use xxxdb;show tables;" > tables.txt 然后再使用hive内置语法导出hive表 ...

  7. ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

    转: ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql 本文为博主原创,转载请注明出处. 在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时 ...

  8. MyBatis对数据库的增删改查操作,简单演示样例

    之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...

  9. ECharts组件应用样例代码

    一.从Echarts官网上下载最新版本组件 Echarts是百度开发的开源Web图表组件,界面美观,使用简单.组件下载地址:http://echarts.baidu.com/echarts2/doc/ ...

  10. SQL SEVER 2008中的演示样例数据库

    SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下怎样学习SQL SEVER 2008数据库,假设是对数据库或是SQL SEVER 数据库全然陌生或是不熟悉的人来说,建议看看一些视频 ...

随机推荐

  1. 手把手教你解决spring boot导入swagger2版本冲突问题,刘老师教编程

    手把手教你解决spring boot导入swagger2版本冲突问题 本文仅为个人理解,欢迎大家批评指错 首先Spring Boot 3 和 Swagger 2 不兼容.在 Spring Boot 3 ...

  2. Vue 组件间通信有哪几种方式?

    父子通信 (1)父组件向子组件传值props <button-counter :title="send"></button-counter> Vue.com ...

  3. Java Objects工具类重点方法使用

    Objects工具类 jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法 重点方法 equals 用于字符串和包装对象的比较,先比较内存地址,再比较值 deepEquals ...

  4. Oracle 启用、禁用触发器

    基本语法 启用指定表中所有触发器(trigger) alter table table_name enable all triggers; 语法: alter table 表名 enable all ...

  5. sshd管理限制登录配置(centos7.9)

    背景情况:为了公网的主机,被无限的密码爆破,需要对主机的ssh进行安装加固 1.首先要禁用root的远程登录和修改ssh的端口 vi /etc/ssh/sshd_config# 修改端口,不适用22端 ...

  6. 全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?

    全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗? 摘要: 本文主要介绍了Python中类和对象中的类方法和静态方法,以及类方法和静态方法的定义 ...

  7. 编程好帮手:通义灵码(TONGYI Lingma),是阿里云出品的一款基于通义大模型的智能编码辅助工具

    通义灵码(TONGYI Lingma),是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写.自然语言生成代码.单元测试生成.代码注释生成.代码解释.研发智能问答.异常报错排查 ...

  8. python配置国内pypi镜像源操作步骤

    使用pip config命令设置默认镜像源,使用国内的源,提高安装速度 操作步骤 临时方式pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/si ...

  9. 怒肝半月!Python 学习路线+资源大汇总

    Python 学习路线 by 鱼皮. 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮,肝了十天左右的 Python 学习路线终于来了~ 和之前一样,在看路线前,建议大家先通过以下视频了解几个问题: ...

  10. 【VMware VCF】VMware Cloud Foundation Part 02:部署 Cloud Builder。

    VMware Cloud Builder 是用于构建 VMware Cloud Foundation 第一个管理域的自动化部署工具,通过将一个预定义信息的 Excel 参数表导入到 Cloud Bui ...