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 数据库全然陌生或是不熟悉的人来说,建议看看一些视频 ...
随机推荐
- python3 pip3 安装 xmlrpc 失败
python2 使用的是xmlrpclib库,到了 python3, 就直接使用 xmlrpc.client 和 xmlrpc.server了. 接下来,我使用 pip3 install xmlrpc ...
- position的值, relative和absolute分别是相对于谁进行定位的?
relative: 相对定位,相对于自己本身在正常文档流中的位置进行定位 相对它原来的位置,在走100px.原来在标准流中的位置继续占有. absolute: 生成绝对定位,相对于最近一级定位不为s ...
- 四 黑马程序员-java面向对象(上)
一.:面向对象 (1)面向对象:是基于面向过程的一种思想. 面向过程:以函数为基础,关注实现过程. 面向对象:以对象为基础,关注实现结果. (2)面向对象的思想特点: A:是一种更符合人们思考习惯的思 ...
- python 列表append和 的区别??
python列表中的合并 python列表中append方法是给列表增加一个元素,而'+='是增加上该符号后边的元素,类似于extend方法 不知道对错,先记下来.我学的append方法是在列表最后追 ...
- Oracle 删除大量表记录操作总结
By:授客 QQ:1033553122 删除表数据操作 清空所有表记录 TRUNCATE TABLE your_table_name; 或者批量删除满足条件的表记录 BEGIN LOOP DELETE ...
- [WPF] 脱机环境实现支持拼音模糊搜索的AutoCompleteBox
AutoCompleteBox是一个常见的提高输入效率的组件,很多WPF的第三方控件库都提供了这个组件,但基本都是字符串的子串匹配,不支持拼音模糊匹配,例如无法通过输入ldh或liudehua匹配到刘 ...
- redis复制replica
通过查看log信息即可观察主机是否与从机正确连接,一般来说主机上有succeeded就是可以了 可以通过info replication查看自己的身份 role:master connected_sl ...
- 对比python学julia(第二章)--(第一节)隔沟算样—枚举策略
1.1. 问题描述 在明代数学家程大位的<算法统宗>著作中记载了这样一道数学题: 甲乙隔沟放牧,二人暗里参详. 甲云得乙九个羊,多你一倍之上. 乙说得甲九只,两家之数相当. 两边闲坐恼心 ...
- mendeley存储是有限的吗
用了mendeley好多年,总是有一个疑问,那就是这东西的云存储空间是不是有限的,如果是有限的话那么上限是多少?这东西不论是app还是桌面端都没有这个空间信息的大小,但是这东西必然是有上限的,那么这个 ...
- 面向分布式强化学习的经验回放框架——Reverb: A Framework for Experience Replay
论文题目: Reverb: A Framework for Experience Replay 地址: https://arxiv.org/pdf/2102.04736.pdf 框架代码地址: htt ...