mybatis-plus批量增加、批量修改样例+建表语句+postman接口
使用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接口的更多相关文章
- mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询
1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...
- c#调用存储过程实现批量增加和修改数据
1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新 ...
- Oracle 批量增加 / 批量跟新
在使用oracl过程中踩到好多坑,在此记录,也分享给大家. 第一:批量插入 代码一(在为明确表和字段的情况下,动态批量增加): @Insert("<script> " ...
- Mysql批量删除和修改某个前缀的表
1.批量删除某个前缀的表名,首先选出这些个表. select concat( 'drop table ', table_name, ';' ) from information_schema.tabl ...
- 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句
1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write ...
- 批量导出hive表的建表语句
转的这里的 首先先导出所有的table表 hive -e "use xxxdb;show tables;" > tables.txt 然后再使用hive内置语法导出hive表 ...
- ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
转: ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql 本文为博主原创,转载请注明出处. 在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时 ...
- MyBatis对数据库的增删改查操作,简单演示样例
之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...
- ECharts组件应用样例代码
一.从Echarts官网上下载最新版本组件 Echarts是百度开发的开源Web图表组件,界面美观,使用简单.组件下载地址:http://echarts.baidu.com/echarts2/doc/ ...
- SQL SEVER 2008中的演示样例数据库
SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下怎样学习SQL SEVER 2008数据库,假设是对数据库或是SQL SEVER 数据库全然陌生或是不熟悉的人来说,建议看看一些视频 ...
随机推荐
- html2canvas 页面截屏
$(document).ready(function () { $(".example1").on("click", function (event) { va ...
- Nuxt框架中内置组件详解及使用指南(四)
title: Nuxt框架中内置组件详解及使用指南(四) date: 2024/7/9 updated: 2024/7/9 author: cmdragon excerpt: 摘要:本文详细介绍了Nu ...
- h5使用js拉起微信支付
近期,业务需求对接了微信支付,做个总结.web网页想要拉起微信支付,有两种方法: H5下单支付 , JSAPI支付 .首先纯前端做不了微信支付,必须配合后端才能通过微信的下单请求.接下来说说这两种方法 ...
- WSL2连接USB设备(以USRP B210为例)
使用WSL2时,发现其无法直接识别到宿主机上插入的USB设备. 可利用USPIPD-WIN项目进行连接. 以下以USRP B210设备连接为例,展示连接过程: 安装USBIPD-WIN 项目 参考连接 ...
- 动态分配内存new和delete
#include<iostream> /* 动态分配内存用new关键字,语法:new 变量类型(初始值) C++11支持{} new int(5) ---- 申请了一个整型内存,并赋初值为 ...
- Standard Template Libary or C++ Standard Library
C++提供一套标准的library称为C++ standard library完全以template完成,所以又被称为Standard Template Library.这套library专门有于实现 ...
- 在Eclipse中使用Project Explorer视图与Package Explorer视图
1.在项目文件比较多的情况下,为了方便查看整体和及时定位到项目文件,通常会同时使用Project Explorer视图与Package Explorer视图. 2.打开Project Explorer ...
- 记一次springboot整合rabbitMQ的list序列化问题
问题:平时传一个类的时候都会继承Serializable实现正确传输,这次我把list<Object>直接丢成了message,导致rabbitMQ不能序列化对象.报错 org.sprin ...
- 一键语法错误增强工具 ChineseErrorCorrector
一键语法错误增强工具 欢迎使用我最近开源的使用一键语法错误增强工具,该工具可以进行14种语法错误的增强,不同行业可以根据自己的数据进行错误替换,来训练自己的语法和拼写模型,希望推动行业文本纠错的发展, ...
- 【IDEA】找不到类资源
报错问题描述: 找不到这个实例调用的方法或者方法缺失重载 找不到这个声明的类资源 解决情况一 import声明缺失,IDEA智能导包提示可以解决 注意,如果存在了重名的类资源,导入了错误的资源,实例引 ...