深入解析Mybatis-Plus框架:简化Java持久层开发(八)

news2024/10/25 14:22:57

🍀 前言

博客地址:

  • CSDN:https://blog.csdn.net/powerbiubiu

👋 简介

本章节介绍如何通过Mybatis-Plus更新数据库中的数据。
本章节不需要前置准备,继续使用之前的测试类,数据库表进行操作。

📖 正文

1 Mapper接口

# 根据主键 ID 来更新
int updateById(T entity);
# entity 用于设置更新的数据,wrapper 用于组装更新条件
int update(T entity, Wrapper<T> updateWrapper);
1.1 updateById

根据主键id更新数据
需求:修改id为2的角色的名称为游客1号,角色编码为tourist02

@Test
public void updateByMapper() {
    Role role = Role.builder()
            .id(2L)
            .roleName("游客1号")
            .roleCode("tourist01")
            .build();

    int i = roleMapper.updateById(role);
    System.out.println("更新:" + i);
}

// 更新:1

实际执行的SQL

UPDATE tb_role SET role_name='游客1号', role_code='tourist01' WHERE id=2
1.2 update

同过其他条件来更新数据
需求:更新角色编码为TEST02的角色数据,修改角色名称为游客2号,角色编码为tourist02

@Test
public void updateByMapper() {
    // 构造数据
    Role role = Role.builder()
    .roleName("游客2号")
    .roleCode("tourist02")
    .build();
    // 条件构造器
    LambdaUpdateWrapper<Role> wrapper = Wrappers.
    <Role>lambdaUpdate().
    eq(Role::getRoleCode, "TEST02");

    int i = roleMapper.update(role, wrapper);
    System.out.println("更新:" + i);
}

// 更新:1

实际执行的SQL

UPDATE tb_role SET role_name='游客2号', role_code='tourist02' WHERE (role_code = 'TEST02')

2 Service接口

// 根据 ID 来更新,entity 用于设置 ID 以及其他更新条件
boolean updateById(T entity);
// wrapper 用于设置更新数据以及条件
boolean update(Wrapper<T> updateWrapper);
// entity 用于设置更新的数据,wrapper 用于组装更新条件
boolean update(T entity, Wrapper<T> updateWrapper);
// 批量更新
boolean updateBatchById(Collection<T> entityList);
// 批量更新,可手动设置批量提交阀值
boolean updateBatchById(Collection<T> entityList, int batchSize);
// 保存或者更新
boolean saveOrUpdate(T entity);
2.1 update

boolean update(T entity, Wrapper<T> updateWrapper)该方式更新和Mapper接口的方式一样,区别只是返回值类型不一样,可以参考上一章删除的操作。
这里使用下boolean update(Wrapper<T> updateWrapper)来进行更新
需求:将角色编码为TEST03的角色修改为,角色名称为游客3号,角色编码为tourist03

@Test
public void updateByService() {
    // 条件构造器
    LambdaUpdateWrapper<Role> wrapper = Wrappers.
            <Role>lambdaUpdate()
            .set(Role::getRoleName, "游客3号")
            .set(Role::getRoleCode, "tourist03")
            .eq(Role::getRoleCode, "TEST03");
    boolean b = roleService.update(wrapper);
    System.out.println("更新:" + b);
}

// 更新:true

实际执行的SQL

UPDATE tb_role SET role_name='游客3号',role_code='tourist03' WHERE (role_code = 'TEST03')
2.2 updateBatchById

批量更新
需求:修改id为2,3,4的角色

@Test
public void updateByService() {
    List<Role> roles = new ArrayList<>();
    roles.add(Role.builder().id(2L).roleName("测试1号").roleCode("test01").build());
    roles.add(Role.builder().id(3L).roleName("测试2号").roleCode("test02").build());
    roles.add(Role.builder().id(4L).roleName("测试3号").roleCode("test03").build());
    boolean b = roleService.updateBatchById(roles);
    System.out.println("更新:" + b);
}

// 更新:true

实际执行的SQL

UPDATE tb_role SET role_name='测试1号', role_code='test01' WHERE id=2
UPDATE tb_role SET role_name='测试2号', role_code='test02' WHERE id=3
UPDATE tb_role SET role_name='测试3号', role_code='test03' WHERE id=4

✏ 总结

💖 欢迎关注我的公众号

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1497535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机的机动车智能远光灯系统设计

目 录 摘 要 I Abstract II 引 言 1 1 主要研究内容及总体设计方案 3 1.1 主要研究内容 3 1.2 系统总体方案选择 3 1.3 系统功能的确定 4 2 硬件电路的设计 5 2.1 单片机控制模块设计 5 2.2 液晶显示模块电路设计 7 2.3 远近灯光电路设计 9 2.4 按键电路设计 9 2.5 超声波电路…

XSS渗透与防御

一、HTTP协议回顾 二、客户端的Cookie 三、服务端的Session 四、JavaScript操作Cookie 使用js语法查看当前网站的cookie 使用js语法添加cookie值 添加unamewuya 刷新网页可以看到添加的cookie值已经发送给服务器 五、脚本注入网页-XSS 六、XSS检测和利用 xsser可以检测网页是…

coqui-ai/TTS 安装使用

Coqui AI的TTS是一款开源深度学习文本转语音工具&#xff0c;以高质量、多语言合成著称。它提供超过1100种语言的预训练模型库&#xff0c;能够轻松集成到各种应用中&#xff0c;并允许用户通过简单API进行个性化声音训练与微调。其技术亮点包括但不限于低资源适应性&#xff0…

7.1 支付模块 - 用户选课

支付模块 - 需求分析、添加选课 文章目录 支付模块 - 需求分析、添加选课一、需求分析1.1 选课业务流程1.2 支付业务流程1.3 在线学习业务流程1.4 课程续期业务流程 二、添加选课2.1 执行流程2.2 数据模型2.2.1 选课记录表 choose_course2.2.2 用户课程表 course_tables 2.3 查…

在多文件编译时,如果模板类的成员函数的定义和模板类不在一个文件下会怎么样?

编译器将找不到成员函数的定义&#xff0c;哪怕你将存放成员函数定义的test.cpp一块编译&#xff0c;编译器也无法找到该模板类的成员函数的定义。 正确的做法是&#xff1a; 将模板类的声明和成员函数定义都定义在.h文件下

星辰天合参与编制 国内首个可兼顾 AI 大模型训练的高性能计算存储标准正式发布

近日&#xff0c;在中国电子工业标准化技术协会高标委的支持和指导下&#xff0c;XSKY星辰天合作为核心成员参与编制的《高性能计算分布式存储系统技术要求》团体标准&#xff0c;在中国电子工业标准化技术协会网站正式发布。 该团体标准强调了分布式存储系统对包括传统高性能计…

libftdi库编译

目录 1. 下载源码 2. Ubuntu下编译 2.1 配置编译环境 2.2 编译 3. Android NDK下编译 3.1 编译libconfuse 3.2 编译libusb 3.3 编译libudev 3.3 编译libftdi 分2部分&#xff0c;先在Ubuntu中编译&#xff0c;然后在Android NDK中编译。 1. 下载源码 下载地址&#…

开源文生图大模型Playground v2.5发布:超越SD、DALL·E 3和 Midjourney

前言 在AI技术迅速发展的今天&#xff0c;文生图模型成为了艺术创作、设计创新等领域的重要工具。Playground v2.5的发布&#xff0c;不仅在技术上取得了突破&#xff0c;更在开源文化的推广与实践上迈出了重要一步。 Huggingface模型下载&#xff1a;https://huggingface.co/…

一文读懂 Databend 的开放表格式引擎

本文介绍了 Databend 开放表格式引擎的支持情况&#xff0c;包括优势与不足、使用方法、与 Catalog 方案的对比。此外&#xff0c;还包含一个简单的 Workshop &#xff0c;介绍如何利用 Databend Cloud 分析位于对象存储中的 Delta Table 。 Databend 近期发布 Apache Iceberg …

如何排查合并问题——《OceanBase诊断系列》之七

1. 前言 OceanBase数据库的存储引擎以 LSM-Tree 架构为基础&#xff0c;区分静态基线数据&#xff08;存储在只读SSTable&#xff09;和动态增量数据&#xff08;存储在可读写MemTable&#xff09;。其中 SSTable 是只读的&#xff0c;一旦生成就不再被修改&#xff0c;存储于…

每日OJ题_链表①_力扣2. 两数相加

目录 力扣2. 两数相加 解析代码 力扣2. 两数相加 2. 两数相加 难度 中等 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个…

MyBatis-Flex学习总结

写在前面的话 MyBatis-Flex 是一个优雅的 MyBatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时&#xff0c;减少出错的可能性…

VPN应用场景典型案例-站点到站点组网应用

组网需求 站点到站点IPSEC隧道也是LAN -to -LAN IPSec描述的是两个局域网之间建立IPSec隧道的概念,建立站到站IPSec隧道时,两个专用网络之间跨越一个公用网络,这样就可以实现私有网络A:192.168.0.0/24到私有网络B:192.168.1.0/24之间的安全通信。以下是该典型环境的组网图…

【MOMO_Tips】批量将word转换为PDF格式

批量将word转换为PDF格式 1.打开文件–>选项–>自定义功能区–>开发工具–>确定 2.点开开发工具&#xff0c;选择第一个visual basic 3.进入页面后找到插入–>模块&#xff0c;就可以看到这样的画面之后将下列vba代码复制粘贴到模块中 Sub ConvertWordsToPd…

MySQL 存储过程(超详细)

一、什么是存储过程&#xff1f; 存储过程可称为过程化SQL语言&#xff0c;是在普通SQL语句的基础上增加了编程语言的特点&#xff0c;把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中&#xff0c;通过逻辑判断、循环等操作实现复杂计算的程序语言。换句话说&#xff0c…

私域做不下去的三大因素

私域运营是近年来的一大热门话题&#xff0c;从线下门店到日常外卖、线上购物&#xff0c;几乎所有的企业都在借助微信等社交媒体平台进行推广。然而&#xff0c;据统计&#xff0c;近90%的私域运营最后都不了了之。 原因1&#xff1a;在于企业对私域的认知不足&#xff0c;营…

【重温设计模式】迭代器模式及其Java示例

迭代器模式的介绍 在编程领域&#xff0c;迭代器模式是一种常见的设计模式&#xff0c;它提供了一种方法&#xff0c;使得我们可以顺序访问一个集合对象中的各个元素&#xff0c;而又无需暴露该对象的内部表示。你可以把它想象成一本书&#xff0c;你不需要知道这本书是怎么印…

C语言学习--练习2

目录 1.排序数组 2.多数元素 3.存在重复元素 4.最大间距 5.按奇偶排序数组 6.最小时间差 1.排序数组 /*** Note: The returned array must be malloced, assume caller calls free().*/ int cmp(const void*a,const void*b){return *(int*)a-*(int*)b; } int* sortArray(i…

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业&#xff0c;需要进行CVPR2024年医疗影像分割赛题的打榜&#xff08;CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP&#xff09;。看到…