news 2026/2/6 15:17:24

【06】SpringBoot3 MybatisPlus 修改(Mapper)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【06】SpringBoot3 MybatisPlus 修改(Mapper)

SpringBoot3 MybatisPlus 修改

  • 前言
  • 修改 API
    • update 条件
    • update 对象+条件
    • updateById
    • updateById 批量(默认)
    • updateById 批量(自定义)

前言

本篇中使用到的项目工程是在《SpringBoot3 MybatisPlus 加入日志功能》基础上,持续功能开发。

修改 API

update 条件

无实体参数的 update(Wrapper updateWrapper) 方法,这个方法是默认方法,底层直接调用 update(null, updateWrapper),核心特点是所有更新字段和 where 条件都通过 Wrapper 统一配置,无需传入实体,同时要注意它不支持字段自动填充(比如创建时间、更新时间的自动赋值)。

官网 API:

/** * 根据 Wrapper 更新记录 * <p>此方法无法进行自动填充,如需自动填充请使用{@link #update(Object, Wrapper)}</p> * * @param updateWrapper {@link UpdateWrapper} or {@link LambdaUpdateWrapper} * @since 3.5.4 */defaultintupdate(@Param(Constants.WRAPPER)Wrapper<T>updateWrapper){returnupdate(null,updateWrapper);}

Demo 示例:

@TestpublicvoidtestUpdate_02(){ClientEntityclientEntity=clientMapper.selectById(301L);System.out.println("修改之前:"+JSON.toJSONString(clientEntity));UpdateWrapper<ClientEntity>updateWrapper=newUpdateWrapper<>();updateWrapper.lambda().eq(ClientEntity::getId,301L).set(ClientEntity::getNickName,"无实体更新-昵称-测试");intupdate=clientMapper.update(updateWrapper);System.out.println("--->>> update = "+update);clientEntity=clientMapper.selectById(301L);System.out.println("修改之后==>>>clientEntity = "+JSON.toJSONString(clientEntity));}

输出日志:

2026-01-28T22:37:39.009+08:00INFO15368---[springboot3-mybatisplus][main]com.zaxxer.hikari.HikariDataSource:HikariPool-1-Startcompleted.JDBCConnection[HikariProxyConnection@187931144wrappingcom.mysql.cj.jdbc.ConnectionImpl@a1cb94]will not be managed bySpring==>Preparing:SELECTid,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM clientWHEREid=?==>Parameters:301(Long)<==Columns:id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time<==Row:301,301,null,null,更新后-昵称_测试,null,2026-01-2822:07:21,2026-01-2822:07:21<==Total:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@2487e20]修改之前:{"clientId":301,"createdTime":"2026-01-28 22:07:21","id":301,"nickName":"更新后-昵称_测试","upatedTime":"2026-01-28 22:07:21"}CreatinganewSqlSessionSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@3395c2a7]was not registeredforsynchronization because synchronization is not active JDBCConnection[HikariProxyConnection@1561688223wrappingcom.mysql.cj.jdbc.ConnectionImpl@a1cb94]will not be managed bySpring==>Preparing:UPDATE clientSETnick_name=?WHERE(id=?)==>Parameters:无实体更新-昵称-测试(String),301(Long)<==Updates:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@3395c2a7]--->>>update=1CreatinganewSqlSessionSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@4ebed2b3]was not registeredforsynchronization because synchronization is not active JDBCConnection[HikariProxyConnection@285646508wrappingcom.mysql.cj.jdbc.ConnectionImpl@a1cb94]will not be managed bySpring==>Preparing:SELECTid,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM clientWHEREid=?==>Parameters:301(Long)<==Columns:id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time<==Row:301,301,null,null,无实体更新-昵称-测试,null,2026-01-2822:07:21,2026-01-2822:07:21<==Total:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@4ebed2b3]修改之后==>>>clientEntity={"clientId":301,"createdTime":"2026-01-28 22:07:21","id":301,"nickName":"无实体更新-昵称-测试","upatedTime":"2026-01-28 22:07:21"}

update 对象+条件

官网 API:

/** * 根据 whereEntity 条件,更新记录 * * @param entity 实体对象 (set 条件值,可以为 null,当entity为null时,无法进行自动填充) * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) */intupdate(@Param(Constants.ENTITY)Tentity,@Param(Constants.WRAPPER)Wrapper<T>updateWrapper);

Demo 示例:

@TestpublicvoidtestUpdate(){ClientEntityclientEntity=newClientEntity();clientEntity.setNickName("更新后-昵称_测试");UpdateWrapper<ClientEntity>updateWrapper=newUpdateWrapper<>();updateWrapper.eq("id",301L);intupdate=clientMapper.update(clientEntity,updateWrapper);System.out.println("update = "+update);// 进行查询验证.clientEntity=clientMapper.selectById(301L);System.out.println("clientEntity = "+JSON.toJSONString(clientEntity));}

输出日志:

2026-01-28T22:27:48.815+08:00INFO17412---[springboot3-mybatisplus][main]com.zaxxer.hikari.HikariDataSource:HikariPool-1-Startcompleted.JDBCConnection[HikariProxyConnection@1376533963wrappingcom.mysql.cj.jdbc.ConnectionImpl@7791ff50]will not be managed bySpring==>Preparing:UPDATE clientSETnick_name=?WHERE(id=?)==>Parameters:更新后-昵称_测试(String),301(Long)<==Updates:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@3a70575]update=1CreatinganewSqlSessionSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@5d74507c]was not registeredforsynchronization because synchronization is not active JDBCConnection[HikariProxyConnection@800040885wrappingcom.mysql.cj.jdbc.ConnectionImpl@7791ff50]will not be managed bySpring==>Preparing:SELECTid,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM clientWHEREid=?==>Parameters:301(Long)<==Columns:id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time<==Row:301,301,null,null,更新后-昵称_测试,null,2026-01-2822:07:21,2026-01-2822:07:21<==Total:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@5d74507c]clientEntity={"clientId":301,"createdTime":"2026-01-28 22:07:21","id":301,"nickName":"更新后-昵称_测试","upatedTime":"2026-01-28 22:07:21"}2026-01-28T22:27:48.996+08:00INFO17412---[springboot3-mybatisplus][ionShutdownHook]com.zaxxer.hikari.HikariDataSource:HikariPool-1-Shutdowninitiated...

updateById

官网 API:

/** * 根据 ID 修改 * * @param entity 实体对象 */intupdateById(@Param(Constants.ENTITY)Tentity);

Demo 示例:

@TestpublicvoidtestUpdate_03(){ClientEntityclientEntity=newClientEntity();clientEntity.setId(301L);clientEntity.setRealName("根据ID更新-名称");intupdate=clientMapper.updateById(clientEntity);System.out.println("update = "+update);clientEntity=clientMapper.selectById(301L);System.out.println("clientEntity = "+JSON.toJSONString(clientEntity));}

输出日志:

2026-01-28T22:41:24.244+08:00INFO13536---[springboot3-mybatisplus][main]com.zaxxer.hikari.HikariDataSource:HikariPool-1-Startcompleted.JDBCConnection[HikariProxyConnection@65194223wrappingcom.mysql.cj.jdbc.ConnectionImpl@362be0cd]will not be managed bySpring==>Preparing:UPDATE clientSETreal_name=?WHEREid=?==>Parameters:根据ID更新-名称(String),301(Long)<==Updates:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@d8e4250]update=1CreatinganewSqlSessionSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@5b59c3d]was not registeredforsynchronization because synchronization is not active JDBCConnection[HikariProxyConnection@110044003wrappingcom.mysql.cj.jdbc.ConnectionImpl@362be0cd]will not be managed bySpring==>Preparing:SELECTid,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time FROM clientWHEREid=?==>Parameters:301(Long)<==Columns:id,client_id,user_no,user_password,nick_name,real_name,created_time,upated_time<==Row:301,301,null,null,无实体更新-昵称-测试,根据ID更新-名称,2026-01-2822:07:21,2026-01-2822:07:21<==Total:1Closingnon transactionalSqlSession[org.apache.ibatis.session.defaults.DefaultSqlSession@5b59c3d]clientEntity={"clientId":301,"createdTime":"2026-01-28 22:07:21","id":301,"nickName":"无实体更新-昵称-测试","realName":"根据ID更新-名称","upatedTime":"2026-01-28 22:07:21"}2026-01-28T22:41:24.417+08:00INFO13536---[springboot3-mybatisplus][ionShutdownHook]com.zaxxer.hikari.HikariDataSource:HikariPool-1-Shutdowninitiated...

updateById 批量(默认)

参考官网 API 可知默认 1000 条数量批次提交。(int DEFAULT_BATCH_SIZE = 1000;

官网 API:

/** * 根据ID 批量更新 * * @param entityList 实体对象集合 * @since 3.5.7 */defaultList<BatchResult>updateById(Collection<T>entityList){returnupdateById(entityList,Constants.DEFAULT_BATCH_SIZE);}/** * 默认批次提交数量 */intDEFAULT_BATCH_SIZE=1000;

updateById 批量(自定义)

官网 API:

/** * 根据ID 批量更新 * * @param entityList 实体对象集合 * @param batchSize 插入批次数量 * @since 3.5.7 */defaultList<BatchResult>updateById(Collection<T>entityList,intbatchSize){MapperProxyMetadatamapperProxyMetadata=MybatisUtils.getMapperProxy(this);MybatisBatch.Method<T>method=newMybatisBatch.Method<>(mapperProxyMetadata.getMapperInterface());SqlSessionFactorysqlSessionFactory=MybatisUtils.getSqlSessionFactory(mapperProxyMetadata.getSqlSession());returnMybatisBatchUtils.execute(sqlSessionFactory,entityList,method.updateById(),batchSize);}

Demo 示例:

@TestpublicvoidtestUpdate_04(){// 生成批量测试数据.List<ClientEntity>clientEntityList=newArrayList();for(inti=300;i<=303;i++){ClientEntityclientEntity=newClientEntity();clientEntity.setId(Long.valueOf(i+1));clientEntity.setClientId(Long.valueOf(i+1));// 此处省略其他属性的 set 方法// clientEntity.setXXX;clientEntity.setNickName("批量-测试姓名"+i);clientEntityList.add(clientEntity);}// 默认批量提交数量intbatchSize=2;clientMapper.updateById(clientEntityList,batchSize);}

输出日志:

2026-01-28T22:45:40.694+08:00INFO4580---[springboot3-mybatisplus][main]com.zaxxer.hikari.HikariDataSource:HikariPool-1-Startcompleted.JDBCConnection[HikariProxyConnection@1878814375wrappingcom.mysql.cj.jdbc.ConnectionImpl@2833c093]will not be managed bySpring==>Preparing:UPDATE clientSETclient_id=?,nick_name=?WHEREid=?==>Parameters:301(Long),批量-测试姓名300(String),301(Long)==>Parameters:302(Long),批量-测试姓名301(String),302(Long)==>Preparing:UPDATE clientSETclient_id=?,nick_name=?WHEREid=?==>Parameters:303(Long),批量-测试姓名302(String),303(Long)

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/157479468

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 1:44:53

初探PCB制造:电镀+蚀刻基础步骤详解

以下是对您提供的技术博文《初探PCB制造:电镀与蚀刻基础步骤深度技术解析》的 全面润色与专业重构版本 。本次优化严格遵循您的核心要求: ✅ 彻底去除AI痕迹 :摒弃模板化表达、空洞总结与机械过渡,代之以工程师真实工作语境中的逻辑流、经验判断与现场洞察; ✅ 强化…

作者头像 李华
网站建设 2026/2/4 14:08:16

手把手教你跑通MGeo镜像,无需深度学习背景

手把手教你跑通MGeo镜像&#xff0c;无需深度学习背景 1. 为什么普通人也能轻松上手MGeo&#xff1f; 你可能已经听说过“地址匹配”这个词——比如把“北京市朝阳区望京SOHO塔3”和“北京望京SOHO”判断为同一个地方。这背后不是靠人工查地图&#xff0c;而是由像MGeo这样的…

作者头像 李华
网站建设 2026/2/6 3:51:00

超详细图文教程:Qwen3-1.7B本地部署全过程

超详细图文教程&#xff1a;Qwen3-1.7B本地部署全过程 你是否也想在自己的机器上跑起最新发布的千问大模型&#xff0c;不依赖云端API、不担心调用限制、随时可调试、完全可控&#xff1f;2025年4月底刚开源的Qwen3系列中&#xff0c;Qwen3-1.7B 是兼顾性能与资源消耗的“甜点…

作者头像 李华
网站建设 2026/2/3 1:22:48

科哥CV-UNet镜像升级后,处理速度提升明显

科哥CV-UNet镜像升级后&#xff0c;处理速度提升明显 1. 升级带来的真实变化&#xff1a;不只是“快了一点” 你有没有过这样的体验——上传一张人像图&#xff0c;盯着进度条等了将近5秒&#xff0c;结果边缘还带着毛边&#xff1f;或者批量处理30张商品图&#xff0c;等了快…

作者头像 李华
网站建设 2026/2/4 23:35:13

AcousticSense AI实战教程:Linux服务器无GUI环境下Headless部署

AcousticSense AI实战教程&#xff1a;Linux服务器无GUI环境下Headless部署 1. 为什么需要无GUI部署&#xff1f;——从工作站到服务器的思维转变 你可能已经试过在本地电脑上运行 AcousticSense AI&#xff0c;拖入一首爵士乐&#xff0c;几秒后看到频谱图缓缓展开&#xff…

作者头像 李华
网站建设 2026/1/29 4:06:19

USB转485驱动入门:Windows系统安装操作指南

以下是对您提供的博文《USB转485驱动入门:Windows系统安装与工程级配置深度解析》的 全面润色与专业重构版本 。本次优化严格遵循您的核心要求: ✅ 彻底消除AI生成痕迹,语言自然、老练、有工程师“手感”; ✅ 打破模板化结构,摒弃“引言/概述/总结”等套路标题,以真实…

作者头像 李华