首页 > 其他分享 >mybatis-plus批量增加、批量修改样例+建表语句+postman接口

mybatis-plus批量增加、批量修改样例+建表语句+postman接口

时间:2024-09-03 21:37:39浏览次数:10  
标签:建表 postman 批量 example return import com public

使用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)文件列表

 

标签:建表,postman,批量,example,return,import,com,public
From: https://www.cnblogs.com/yclh/p/18395247

相关文章

  • Python批量分割Excel后逐行做差、合并文件的方法
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,首先依据某一列数据的特征截取我们需要的数据,随后对截取出来的数据逐行求差,并基于其他多个文件夹中同样大量的Excel表格文件,进行数据跨文件合并的具体方法。  首先,我们来明确一下本文的具体需......
  • 批量替换字符串中的某子串序列为对应的另一子串序列(z3求解器解多元方程时很好用)
    标题有点拗口,看问题需求就理解了——一,问题需求有一个字符串s1,其中包含a1、a2、a3到a14这些子串,我需要将s1中出现的这些子串全部对应替换成v[0],v[1],v[2]到v[13]等等,应该怎么编写程序例如:s1='a1*88+a2*67+a3*65-a4*5+a5*43+a6*89+a7*25+a8*1......
  • ssh密钥批量分发 ssh-copy-id shell脚本
    所有linux主机之间(包含本主机)root用户实现密钥ssh认证,禁用密码认证。1.shrm-rf~/.ssh/{known_hosts,id_rsa*}ssh-keygen-trsa-N''-f~/.ssh/id_rsayum-yinstallexpecttclforiin{1..3}do expect<<[email protected].$iexpect"ye......
  • 5分钟部署Prometheus+Grafana批量监控Linux服务器
    文章目录一键安装NodeExporter安装prometheus创建数据存储目录创建配置文件下载运行Prometheus安装Grafana创建数据目录下载运行Grafana配置Grafana监控Linux服务器登录首次登录后设置密码添加数据源选择prometheus填写prometheus地址导入模板辛苦您也关注下公众号,感谢!本文......
  • PHP批量修改MySQL数据表字符集为utf8mb4/utf8mb4_unicode_ci
    编码大全可参考我之前的文章:快速理解ASCII、GBK、Unicode、UTF-8、ANSI批量修改注意这是DDL操作,操作过程会锁表(元数据锁),平均1秒能够转码3张表(数据量不大)。亲测操作过后没有数据异常,推荐执行前备份。//接手一些老项目,需要修改编码。$host='';$db='';$user='';$pa......
  • Postman完美平替!免费开源、轻量级、快速且美观的 API 调试工具Hoppscotch
    Hoppscotch:开源API的智能伙伴,让开发更简单、更高效。 - 精选真开源,释放新价值。概览Hoppscotch是一个开源的API开发工具,它为开发者提供了一个全面而直观的平台来构建、测试和监控API。作为一个开源项目,它具有高度的可定制性和灵活性,允许用户根据自己的需求进行调整。Hoppscotc......
  • 龙讯LT8618SXB TTL/RGB/BT656/BT1120转HDMI 1.4,成熟批量产品
      LT8618SXB描述:LT8618SXB是Lontium基于ClearEdgeTM技术的低功耗版本HDMI发射机。它支持24位颜色深度HDMI1.4(高清多媒体接口)规范。它们完全向后兼容Lontium的第一代HDMI发射机LT8618EX。LT8618SX是一款高性能、低功耗的部件,专为高清-数码相机、高清-数码摄像机、高清-PMP/MP......
  • Python自动化批量创建CloudWatch告警监控Amazon OpenSearch Service数据传输
    在使用AmazonOpenSearchService时,确保数据传输的可靠性和完整性至关重要。本文将介绍如何使用Python脚本自动批量创建CloudWatch告警,以监控多个KinesisDataFirehose向OpenSearch传输数据的成功率。为什么要监控数据传输成功率?及时发现问题:当数据传输出现异常时,......
  • 用photoshop给图片批量加水印
    一、打开动作窗口菜单栏窗口→勾选动作二、开始记录动作打开任意一张要增加水印的图片在动作窗口中,点击右下角的新建动作图标,开始记录菜单栏文件→嵌入智能对象,选择水印文件调整水印图片的位置,根据需要调整其透明度ctrl+shift+S,存储为jpg文件关闭图片,停止......
  • 无法在 Postman 中使用 JavaScript 访问发送的信息
    Postman是一个用于测试API的工具,它本身并不支持在请求中直接执行JavaScript代码。Postman主要用于发送HTTP请求并查看响应。如果你需要在发送请求时执行一些自定义的逻辑或处理请求数据,你可以考虑以下几种方法:使用Postman的预请求脚本(Pre-requestScript)或测试脚本(TestS......