MyBatis 之二(增、删、改操作)
文章目录
- 1. 修改操作
- 1.1 在 mapper(interface)里面添加修改方法的声明
- 1.2 在 XMl 中添加 <update> 标签和修改的 sql 代码
- 1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类
- 2. 删除操作
- 2.1 在 mapper (interface)中添加删除的代码声明
- 2.2 在 XMl 中添加 <delete> 标签和删除的 sql 代码
- 2.3 在 UserMapper 中右键 Generate 点击 Test 生成 delete 测试类
- 3. 添加操作
- 3.1 添加用户,返回受影响的行数
- 3.1.1 在 mapper(interface)添加方法声明
- 3.1.2 在 XML 中添加<insert>标签和添加的 sql 代码
- 3.1.3 生成测试类
- 3.2 添加用户,返回自增 id
- 3.2.1 添加方法声明
- 3.2.2 在 XML 中添加 <insert> 标签和添加的 sql 代码
- 3.2.3 生成测试类
回顾一下,在上一篇 MyBatis 之一(概念、创建项目、操作模式、交互流程)中,学习了 MyBatis 是一款优秀的持久层框架,学习 MyBatis 可以更方便快速的操作数据库,也学习了如何搭建 MyBatis 的开发环境,与使用 MyBatis 模式和语法操作数据库,并且也简单的了解了 MyBatis 框架的交互流程
本篇将学习如何用 MyBatis 进行数据库的增、删、改操作
这三个操作对应使用 MyBatis 的标签为
- insert 标签:插入语句
- update 标签:修改语句
- delete 标签:删除语句
1. 修改操作
还是使用上一篇中创建的数据库,再给 userinfo 表中添加一条数据
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(2, 'zhangsan', 'zhangsan', '', '2021-5-21 17:10:48', '2022-5-21 17:10:48', 1);
1.1 在 mapper(interface)里面添加修改方法的声明
@Mapper
public interface UserMapper {// 修改方法【根据 id 修改名称】public int update(@Param("id") Integer id,@Param("name") String username);
}
1.2 在 XMl 中添加 标签和修改的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper"><!-- 根据用户 id 修改用户名称 --><update id="update">update userinfo set username=#{name} where id=#{id}</update>
</mapper>
1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类
@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid update() {int result = userMapper.update(2,"老六");Assertions.assertEquals(1,result);}
}
通过断言 asserEquals 判断如果 sql 受影响行数为1,就运行正确,下面运行程序
然后在 mySQL中 查询,可以看到这样的测试默认情况下是污染数据库的
在不污染数据的前提下,执行单元测试,要添加注解 @Transactional
运行程序,可以看到程序虽然执行成功了,但查询数据后,没有被污染
2. 删除操作
2.1 在 mapper (interface)中添加删除的代码声明
@Mapper
public interface UserMapper {// 删除方法public int delete(@Param("id") Integer id);
}
2.2 在 XMl 中添加 标签和删除的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper"><!-- 根据用户 id 删除用户 --><delete id="delete">delete from userinfo where id=#{id}</delete>
</mapper>
2.3 在 UserMapper 中右键 Generate 点击 Test 生成 delete 测试类
@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid delete() {int result = userMapper.delete(2);System.out.println("受影响的行数:" + result);Assertions.assertEquals(1, result);}
}
我这里没添加@Transactiona,所以就直接把这条数据删除了
3. 添加操作
3.1 添加用户,返回受影响的行数
3.1.1 在 mapper(interface)添加方法声明
@Mapper
public interface UserMapper {// 添加用户,返回受影响的行数public int add(Userinfo userinfo);
}
3.1.2 在 XML 中添加标签和添加的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper"><!-- 添加用户,返回受影响的行数 --><insert id="add">insert into userinfo(username,password,photo) values(#{username},#{password},#{photo})</insert>
</mapper>
3.1.3 生成测试类
@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid add() {Userinfo userinfo = new Userinfo();userinfo.setUsername("王五");userinfo.setPassword("123");userinfo.setPhoto("default.png");int result = userMapper.add(userinfo);System.out.println("添加的结果:" + result);Assertions.assertEquals(1,result);}
}
3.2 添加用户,返回自增 id
3.2.1 添加方法声明
@Mapper
public interface UserMapper {// 添加用户,返回受影响的行数和自增的 idpublic int addGetId(Userinfo userinfo);
}
3.2.2 在 XML 中添加 标签和添加的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper"><!-- 添加用户,返回受影响的行数和自增 id --><insert id="addGetId" useGeneratedKeys="true" keyProperty="id" keyColumn="id">insert into userinfo(username,password,photo) values(#{username},#{password},#{photo})</insert>
</mapper>
3.2.3 生成测试类
@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid addGetId() {Userinfo userinfo = new Userinfo();userinfo.setUsername("张三");userinfo.setPassword("123");userinfo.setPhoto("default.png");System.out.println("添加之前 user id:" + userinfo.getId());int result = userMapper.addGetId(userinfo);System.out.println("受影响的行数:" + result);System.out.println("添加之后 uer id:" + userinfo.getId());Assertions.assertEquals(1,result);}
}
相关文章:

MyBatis 之二(增、删、改操作)
文章目录1. 修改操作1.1 在 mapper(interface)里面添加修改方法的声明1.2 在 XMl 中添加 <update> 标签和修改的 sql 代码1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类2. 删除操作2.1 在 mapper (interface&#x…...

28k入职腾讯测试岗那天,我哭了,这5个月付出的一切总算没有白费~
先说一下自己的个人情况,计算机专业,16年普通二本学校毕业,经历过一些失败的工作经历后,经推荐就进入了华为的测试岗,进去才知道是接了个外包项目,不太稳定的样子,可是刚毕业谁知道什么外包不外…...

【surfaceflinger源码分析】surfaceflinger进程的消息驱动模型
概述 对于surfaceflinger大多数人都知道它的功能是做图形合成的,用英语表示就是指composite。其大致框图如下: 各个Android app将自己的图形画面通过surface为载体通过AIDL接口(Binder IPC)传递到surfaceflinger进程surfaceflinger进程中的composition engine与HW…...
「架构师」001计算机组成与体系结构
文章目录 前言一、计算机结构1.1 计算机组成结构1.2 CPU组成1.3 冯诺依曼结构与哈佛结构二、存储结构2.1 层次化存储结构2.2 Cache三、数据传输控制方式四、总线五、CISC与RISC六、流水线七、校验码八、嵌入式前言 本文主要介绍计算机组成与体系结构。 一、计算机结构 1.1 计…...

既然有HTTP协议,为什么还要有RPC
既然有HTTP协议,为什么还要有RPC? 从TCP聊起 作为一个程序员,假设我们需要在A电脑的进程发一段数据到B电脑的进程,我们一般会在代码里使用socket进行编程。 这时候,我们可选项一般也就TCP和UDP二选一。TCP可靠&…...
【新2023】华为OD机试 - 选座位(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 选座位 题目 疫情期间需要大家保证一定的社交距离 公司组织开交流会议,座位有一排共N个座位 编号分别为[0...n-1] 要求员工一个接着一个进入会议室 并且还可以在任何时候离开会议室 每当一个员工进入时…...

数据分析与SAS学习笔记4
INPUT语句:格式修饰符: “:” 修饰符。表示从下一个非空格列读入数据,直到:1 遇到再下一个空格列; 2 读到预先定义的变量长度; 3 数据行结束。哪个先出现就在哪儿结束。 “&” 修饰符。表示从下一个非空格列读入…...

Xepor:一款针对逆向工程和安全分析的Web路由框架
关于Xepor Xepor是一款专为逆向分析工程师和安全研究专家设计的Web路由框架,该工具可以为研究人员提供类似Flask API的功能,支持以人类友好的方式拦截和修改HTTP请求或HTTP响应信息。 该项目需要与mitmproxy一起结合使用,用户可以使用Xepor…...

Hadoop核心组成和生态系统简介
一、Hadoop的概念 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System)&am…...

Flutter-Charts_painter大数据量绘制性能优化-数据收敛
Flutter-Charts_painter大数据量绘制性能优化-数据收敛 1、背景介绍 HRV测量仪器上传的数据,每秒有250个数据,业务上需要测量180秒,预计有3w-5w个数据点需要绘制到折线图上去。Charts_painter绘制这么大的数据是时候会有些卡顿,…...

使用 GeForce Experience 更新 NVIDIA GPU 显卡驱动
使用 GeForce Experience 更新 NVIDIA GPU 显卡驱动1. NVIDIA GeForce Experience 2. 驱动程序 -> 检查更新文件 3. 下载 如果有可用的新版驱动的话,点击后方的 [下载] 按钮即可。 4. 安装 [快速安装] 按照默认设置安装驱动,[自定义安装] 可以自行…...
Java泛型的<? super T>,<? extend T>的区别
? extends T ? extends T 描述了通配符上界, 即具体的泛型参数需要满足条件: 泛型参数必须是 T 类型或它的子类, 例如: List<? extends Number> numberArray new ArrayList<Number>(); // Number 是 Number 类型的 List<? extends Number>…...

如何做出好看的Excel可视化图表?
可视化死磕excel是不行的,作为数据分析行业的偷懒大户,分享一些我在可视化工具上的使用心得,总结了三大类:快速出图类、专业图表类、高端大屏类。个人经验,大家按需采纳: 一、快速出图类 如果你只是因为偶…...
智能吸吹一体式方案设计特点
一、家用吸吹一体吸尘器方案研发设计要素: 1.小巧的机身设计,一手掌握,无论是床底、沙发下还是家具缝隙之中都能够使用。 2.无线,插电两用,在家方便可插电使用。内置可充电锂电池,充满电也可无线使用。 3.采…...

CSDN 编辑器 Marddown 语法备忘
原文链接:https://blog.csdn.net/blogdevteam/article/details/103478461 本文对其二次加工,增加渲染样式、补充例程、添加未收录的常用语法。 CSDN Markdown 编辑器遵循 CommonMark spec 语法规范。 快捷键 撤销:Ctrl/Command Z 重做&…...

回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测
回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测 目录回归预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 Matlab实现NGO-BiLSTM北方苍鹰算法…...

Linux——操作系统安装
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…...

AFLNET lightftp项目报错解决方法
在学习AFLNET的时候,本人尝试对示例项目中的lightftp进行fuzz,而后出现如下报错: AFLNet - the states hashtable should always contain an entry of the initial state 在github项目issue里看到了有人的问题和我一摸一样,Stack Overflow里…...
av 146 003
121. 团队章程的目标是什么? A. 使团队正规化,以便能够清楚地了解资源分配和参与情况 B. 创造一个团队可以自我管理和自我指导的环境 C. 创造一个环境,使团队成员能够尽其所能地工作 D. 创造一种团队归属感,促进包容性和协作性的行为 12…...

干了1年“点点点”,自己辞职了,下一步是继续干测试还是转开发?
最后后台有个粉丝向我吐槽,不知道怎么选择了....下面就他的情况说说怎么选择? 目前已经提桶跑路,在大工厂里混了半年初级低级功能测试经验,并没有什么用。测试培训班来的。从破山村贫困户贫困专项出去的,学校上海的。…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...