5.5 Mybatis Update标签实战,返回值是什么? 教你通常处理做法

news2024/12/22 20:17:40

CSDN成就一亿技术人


本文目录

  • 前言
  • 一、update标签实战
    • ① 在UserMapper接口中新增update方法
    • ② MybatisX插件生成update标签
    • ③ 写update SQL 语句
  • 二、update sql返回值是什么?
  • 三、Mybatis update标签返回值是什么?
  • 四、实现简易的修改密码API
    • 1. dal层
    • 2. service层
    • 3. web层
    • 自测通过
  • 五、Git提交
  • 最后


前言

通过 《上文》,我们学会了如何在Mybatis中使用insert标签,并学会了使用两种方式获取返回主键id,本文主要讲解update标签,用于和update SQL语句映射,依然结合实战边做边讲。
其实update标签非常简单,知识点不多!所以,本文主要安排的小知识点:返回值是什么? 为什么要讲返回值呢? 确实是因为有同学在群里对上文的insert标签返回值提出了疑问,实际update标签更有代表性,因为单条insert只要没有异常,返回值总是1,所以我们没必要进行处理!但是update却不一样,一条update语句可以同时修改N条记录,那么它的返回值究竟是什么呢?通常又如何处理呢?跟我一起来展开今天学习,Let’s Go!


一、update标签实战

update 标签用于映射SQL语句中的update语句
我们还是以上文的UserMapperUserMapper.xml为例,实战修改密码的功能!

① 在UserMapper接口中新增update方法

在 UserMapper.java 中添加接口方法,传入id和password两个参数。

int updatePassword(@Param("id") Integer id, @Param("password") String password);

通过@Param指定参数名

② MybatisX插件生成update标签

在这里插入图片描述
点击后,在UserMapper.xml中生成如下(不用插件生成的话,自己手写也是一样的):

<update id="updatePassword"></update>

说明: 和select和insert标签一样,通过唯一的 id 与接口方法关联。

③ 写update SQL 语句

接下来,编写对应的update SQL语句,如下:

<update id="updatePassword">
    update user set password = #{password} where id = #{id}
</update>

这样就实现了使用Mybatis update标签实现修改密码,是不是So Easy?Mybatis的使用体验非常友好,只要会写SQL,分分钟就能学会!


二、update sql返回值是什么?

update标签返回值,实际就是update sql语句的返回值,那么我们就先了解两个概念

  • 受影响行数:执行后实际受影响的行数
  • 匹配行数:执行前匹配条件的行数

请看示例,我们修改用户密码,注意此时密码有更改,看看返回什么:
在这里插入图片描述

返回值主要有两个,注意区别:
1 row affected 代表1行受影响,也就是说明1行数据发生了改变
Rows matched: 1 代表1行已匹配,只能说明有一行和update条件匹配,数据不一定发生了改变

我们接着再执行一遍同样的sql,仔细看返回值变了:
在这里插入图片描述

返回值:
0 row affected 这时为什么0行受影响?因为password更改前就是123,改成123相当于相当于没有修改!
Rows matched: 1 依然1行已匹配


三、Mybatis update标签返回值是什么?

update sql的返回值有两个,但是Mybatis update标签只返回一个int,这究竟是哪个呢?
默认返回的是匹配行数,因为受影响行数对我们来说更有意义,我们通过它可以确定数据真正修改的行数,所以通常在spring.datasource.url中指定useAffectedRows=true返回受影响行数

spring.datasource.url=jdbc:mysql://localhost:3306/db_book?useUnicode=true&characterEncoding=utf8&useSSL=false&useAffectedRows=true

四、实现简易的修改密码API

这样修改密码并不恰当,仅是示例

1. dal层

在这里插入图片描述

2. service层

在这里插入图片描述

新建UserService接口:

这里我直接返回行数,是为了更直观的让大家看到实际受影响的行数。
如果业务需要,其实可以在service层根据受影响行数 进行判断,比如:判断 > 0 代表有影响的行数,才进行相关逻辑处理!

package org.tg.book.service;

public interface UserService {

    /**
     * 修改密码
     */
    Integer updatePassword(Integer id, String password);
}

对应UserServiceImpl实现类:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public Integer updatePassword(Integer id, String password) {
        return userMapper.updatePassword(id, password);
    }
}

3. web层

在这里插入图片描述

新建UserController:

@RestController
@RequestMapping("/user")
@CrossOrigin(origins = "*")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/password")
    public TgResult<Integer> updatePassword(@RequestBody PasswordVO passwordVO){
        Integer rows = userService.updatePassword(passwordVO.getId(), passwordVO.getPassword());
        return TgResult.ok(rows);
    }
}

对应的PasswordVO:

@Data
public class PasswordVO implements Serializable {
    private Integer id;
    private String password;
}

自测通过

在这里插入图片描述
在这里插入图片描述


五、Git提交

养成好习惯,小步提交,多次提交,避免攒了很多代码,最后提交CodeReview时一个地方需要修改,导致全部代码合并不了!
在这里插入图片描述


最后

如果喜欢,想学习更多实战真东西的,想找人带你快速成长的,想投资自己的,点击链接订阅专栏:

服务端实战 :SpringBoot+Vue前后端分离项目实战
前端实战 :Vue + SpringBoot前后端分离项目实战

具体的优势、规划、技术选型都可以在《开篇》试读,有详细说明!订阅后加下面我的WX,一对一指导!

另外,别忘了关注:天罡gg ,发布新文不容易错过: https://blog.csdn.net/scm_2008

老规矩,请投票给我反馈,谢谢大家的支持!

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

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

相关文章

vue - 常见的移动端rem适配方案

移动端rem适配方案 rem适配原理方案1&#xff1a;rem媒体查询方案2&#xff1a;jsrem方案3&#xff1a;vwrem&#xff08;不用查询屏幕宽度&#xff09; 移动端适配经常使用的就是 rem; 主要有以下几种方案&#xff1a; 1&#xff1a;rem 媒体查询&#xff08;media&#xff0…

蓝桥杯最后一战

目录 分巧克力_二分 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码&#xff1a; 巧克力 - 优先队列 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码&#xff1a; 思路分析&#xff1a; 秘密行动_dp 蓝桥杯算法提高-秘密行动 题目描述 …

Unity之OpenXR+XR Interaction Toolkit 安装和配置

前言 XR Interaction Toolkit 是Unity基于OpenXR标准&#xff0c;发布的一套XR工具&#xff0c;目的是方便我们快速接入XR相关的SDK&#xff0c;并且做到兼容不同VR设备的目的&#xff0c;目前流行的VR设备如Oculus&#xff0c;Metal&#xff0c;HTC Vive&#xff0c;Pico等统…

改进YOLOv8 | 主干网络篇 | YOLOv8 更换骨干网络之 MobileNetV3 | 《搜寻 MobileNetV3》

论文地址:https://arxiv.org/abs/1905.02244 代码地址:https://github.com/xiaolai-sqlai/mobilenetv3 我们展示了基于互补搜索技术和新颖架构设计相结合的下一代 MobileNets。MobileNetV3通过结合硬件感知网络架构搜索(NAS)和 NetAdapt算法对移动设计如何协同工作,利用互…

【天秤座区块链】元宇宙知识普以及简单解读清华研究报告

本节目录 温馨提示关于分栏【天秤座区块链】由来提前感受元宇宙区块链的两个注意点区块链革命简单认识清华大学报告解读&#xff08;元宇宙&#xff09;前传《雪崩》元宇宙具体是什么&#xff1f;元宇宙不是什么&#xff1f;那为什么要冲击元宇宙呢&#xff1f; 小补充及感谢 温…

前端搭建打字通游戏(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 打字通功能介绍✨ 页面搭建✨ 样式代码✨ 功能实现 ✨ 写在前面 上周我们实通过前端基础实现了名言生成器&#xff0c;当然很多伙伴再评论区提出了想法&#xff0c;后续我们会考虑实现的&#xff0c;今天还是继续按照我们…

java基础入门-06-【面向对象进阶(多态包final权限修饰符代码块)】

Java基础入门-06-【面向对象进阶&#xff08;多态&包&final&权限修饰符&代码块&#xff09;】 14、面向对象进阶&#xff08;多态&包&final&权限修饰符&代码块&#xff09;1.1 多态的形式1.2 多态的使用场景1.3 多态的定义和前提1.4 多态的运行…

嵌入式设备逆向所需的工具链

导语&#xff1a;本文介绍了嵌入式设备逆向所需的工具链。 相关的应用程序或工具有&#xff1a; UART(Universal Asynchronous Receiver Transmitter&#xff0c;通用异步收发器)&#xff1a; UBoot&#xff1b; Depthcharge&#xff1b; SPI (Serial Peripheral Interface…

利用文本描述替换万物(Inpaint-Anything-Description)

文章目录 引言安装Demo github&#xff1a; https://github.com/Atlas-wuu/Inpaint-Anything-Description 引言 前段时间看了万物分割SAM、文生图Stable Diffusion、开集检测Grounding DINO&#xff0c;它们之间可以互相补充&#xff0c;AIGC变得更加可控。Inpaint Anything将…

RK3568平台开发系列讲解(网络篇)Linux 的 socket 套接字

🚀返回专栏总目录 文章目录 一、套接字的数据结构1.1、struct socket 数据结构1.2、struct sock 数据结构二、套接字的初始化三、套接字与文件四、Socket Buffer沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 内核支持的套接字如下: 我们创建套接字时,可以…

PCIe物理层弹性缓存机制(详细)解析-PCIe专题知识(四)

目录 前言一、简介二、详细解析2.1 实例解析2.2 具体实现过程 三、总结四、其他相关链接1、PCI总线及发展历程总结2、PCIe物理层总结-PCIE专题知识&#xff08;一&#xff09;3、PCIe数据链路层图文总结-PCIe专题知识&#xff08;二&#xff09;4、PCIe物理层链路训练和初始化总…

国产ChatGPT命名图鉴

很久不见这般热闹的春天。 随着ChatGPT的威名席卷全球&#xff0c;大洋对岸的中国厂商也纷纷亮剑&#xff0c;各式本土大模型你方唱罢我登场&#xff0c;声势浩大的发布会排满日程表。 有趣的是&#xff0c;在这些大模型产品初入历史舞台之时&#xff0c;带给世人的第一印象其…

进程替换函数组介绍exec*

目录 前述 execl execlp execle execv execvp execvpe 前述 介绍后缀的意义&#xff1a; l &#xff08;list&#xff09;&#xff1a;表示参数采用列表。 v&#xff08;vector&#xff09;&#xff1a;参数同数组表示。 p&#xff08;path&#xff09;&#xff1a;自…

力扣题库刷题笔记704-二分查找

1、题目如下&#xff1a; 2、个人Python代码如下&#xff1a; 个人代码如下&#xff1a; class Solution: def search(self, nums: List[int], target: int) -> int: left 0 right len(nums) - 1 while left < right: mid (right left) >> 1 if nums[mid] >…

【C++类和对象之拷贝构造、赋值运算符重载】

拷贝构造、赋值运算符重载 ❀拷贝构造函数 特性 ❀赋值运算符重载 赋值运算符重载格式 &#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f389;系列…

【数字图像处理】边缘检测

文章目录 0. 前言1. Sobel算子2. Canny算子3. 深度学习算法3.1 Holistically-Nested Edge Detection&#xff08;HED&#xff09;3.2 Richer Convolutional Features&#xff08;RCF&#xff09; 0. 前言 边缘检测是一种图像处理技术&#xff0c;旨在标识和定位数字图像中的边…

【信息系统安全/计算机系统安全】期末复习(HITWH)

PDF版本及更多资料&#xff08;百度网盘&#xff09;&#xff1a; 链接&#xff1a;信息系统安全期末复习 目录 第一章 绪论 第二章 安全认证 填空题 第三章 访问控制 填空题 第四章 安全审计 填空题 第五章 Windows操作系统安全 填空题 第六章 Linux操作系统安全 填…

JDBCSpring:使用Spring JDBC封装Dao

目录标题 1、工程目录pom.xml文件 2、创建数据表student3、在resources目录创建配置文件applicationContext.xmljdbc.properties 4、创建Bean对象Student 5、创建Dao类UserDao接口 6、插入数据一、直接注入jdbctemplate二、继承jdbcdaosupport类 7、运行结果图 1、工程目录 pom…

go 使用pprof分析性能,trace追踪

前言 pprof是Go程序自带的性能分析工具&#xff0c;prof是profile&#xff08;画像&#xff09;的缩写&#xff0c;用于分析go程序的性能。 Profile Descriptions: allocs: A sampling of all past memory allocations 已分配内存采样 block: Stack traces that led to bloc…

梯度下降算法

梯度下降算法的公式&#xff1a; 公式依次代表为“下次迭代的点”、“目前所在的点”、“学习率”和“最大负向梯度”。按照这个公式&#xff0c;每次迭代都会根据上次的步长减去学习率乘以“梯度”的值&#xff0c;去一步一步更新&#xff0c;这样能可以每次迭代都朝着最大负方…