MyBatis 之二(增、删、改操作)

news2024/9/28 13:23:18

文章目录

  • 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 {

    @Autowired
    private UserMapper userMapper;

    @Test
    void 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 {

    @Autowired
    private UserMapper userMapper;

    @Test
    void 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 {

    @Autowired
    private UserMapper userMapper;

    @Test
    void 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 {
    
    // 添加用户,返回受影响的行数和自增的 id
    public 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 {

    @Autowired
    private UserMapper userMapper;

    @Test
    void 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);
    }
}

在这里插入图片描述

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

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

相关文章

重生之我是赏金猎人-SRC漏洞挖掘(六)-记一次有趣的客户端RCE+服务端XXE挖掘

0x01 起因 朋友给某甲方做渗透测试&#xff0c;奈何甲方是某知名保险&#xff0c;系统太耐艹&#xff0c;半天不出货 兄弟喊我来一块来看&#xff0c;于是有了本文 0x02 客户端RCE一处 朋友把靶标发给我看了下&#xff0c;除了两个下载链接啥也没有 链接下载下来的东西如图…

回溯算法理论基础

目录什么是回溯法回溯法的效率回溯法解决的问题如何理解回溯法回溯法模板什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 所以以下讲解中&#xff0c;回溯函数也就是递归函数&#xff0c;指…

SpringCloud: sentinel降级配置、热点参数、系统规则 配置到nacos

一、application.yml spring.cloud.sentinel cloud:nacos:discovery:# 服务注册地址server-addr: xxx.xxx.xxx.xxx:8848sentinel:eager: truetransport:# 控制台地址dashboard: localhost:9999# nacos配置持久化datasource:ds2:nacos:server-addr: xxx.xxx.xxx.xxx:8848dataId…

YOLO 格式数据集制作

目录 1. YOLO简介 2.分割数据集准备 3.代码展示 整理不易&#xff0c;欢迎一键三连&#xff01;&#xff01;&#xff01; 1. YOLO简介 YOLO&#xff08;You Only Look Once&#xff09;是一种流行的目标检测和图像分割模型&#xff0c;由华盛顿大学的 Joseph Redmon 和 Al…

B端产品设计表单的主要分类和相关控件认识

在 Ant、TDesign、Arco 等开源系统中&#xff0c;表单的控件罗列、解释都已经非常全面了&#xff0c;即使是新手完整的看一遍&#xff08;这可不能偷懒&#xff5e;&#xff09;&#xff0c; 也能对表单相关控件有个大致的认识了。 之所以还要更新今天这篇内容&#xff0c;就是…

「5」线性代数(期末复习)

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 第四章 向量组的线性相关性 &5&#xff09;向量空间 第五章 相似矩阵及二次型 &a…

HIVE 安装

目录 启动hadoop 把hive压缩包拷贝到虚拟机里面 解压 改名 配置环境变量 新建一个hive-site.xml文件&#xff0c;并编辑 配置文件 添加jar包 初始化mysql 启动hive 创建数据库 使用数据库 创建表 添加数据 查看数据 删除表 安装虚拟机 安装JDK 安装Hadoop …

亿级高并发电商项目-- 实战篇 --万达商城项目 九(广告服务、安装Redis优化用户缓存、广告服务实现类等开发)

专栏&#xff1a;高并发---分布式项目 亿级高并发电商项目-- 实战篇 --万达商城项目搭建 一 &#xff08;商家端与用户端功能介绍、项目技术架构、数据库表结构等设计&#xff09; 亿级高并发电商项目-- 实战篇 --万达商城项目搭建 一 &#xff08;商家端与用户端功能介绍、项…

多功能手机-课后程序(JAVA基础案例教程-黑马程序员编著-第三章-课后作业)

【案例3-3】多功能手机 记得 关注&#xff0c;收藏&#xff0c;评论哦&#xff0c;作者将持续更新。。。。 【案例介绍】 案例描述 随着科技的发展&#xff0c;手机的使用已经普及到每个家庭甚至个人&#xff0c;手机的属性越来越强大&#xff0c;功能也越来越多&#xff0c;因…

测试开发之Django实战示例 第十一章 渲染和缓存课程内容

第十一章 渲染和缓存课程内容在上一章中&#xff0c;使用了模型继承和通用关系建立弹性的课程、章节和内容的关联数据模型&#xff0c;并且建立了一个CMS系统&#xff0c;在其中使用了CBV&#xff0c;表单集和AJAX管理课程内容。在这一章将要做的事情是&#xff1a;创建公开对外…

数据建模工具:GeneXproTools 5.0 Crack

什么是 GeneXproTools&#xff1f; Microsoft 屡获殊荣的 GeneXproTools 是一种极其灵活的建模工具&#xff0c;专为 回归、逻辑回归、分类、时间序列预测和逻辑综合而设计。GeneXproTools 非常易于使用&#xff0c;实际上就像导入数据一样简单&#xff0c;然后单击一个按钮&a…

【nodejs-05】黑马nodejs学习笔记05-数据库基本操作01

文章目录3.MySQL的基本使用3.1 使用 MySQL Workbench 管理数据库3.2 使用 SQL 管理数据库3.3 SQL 的 SELECT 语句3.4 SQL 的 INSERT INTO 语句3.5 SQL 的 UPDATE 语句3.6 SQL 的 DELETE 语句3.7 SQL 的 WHERE 子句3.8 SQL 的 AND 和 OR 运算符3.9 SQL 的 ORDER BY 子句3.10 SQL…

重生之我是赏金猎人-SRC漏洞挖掘(九)-从本无法触发的xss到梦幻联动挖掘多个致命接口下的XSS触发点

0x00 前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎亲们点个star 作者&#xff1a;画风m78sec 在不久前参加了一次众测项目&#xff0c;需对某厂商的系统进行漏洞挖掘 在测试一套系统时&#xff0c;发现了很有意思的接口&#xff0c;可以操作另外两个站的输出…

Java高手速成 | Java web 实训之投票系统

01、投票系统的案例需求 在本篇中,我们将制作一个投票系统,让学生给自己喜爱的老师投票。该系统由1个界面组成,系统运行,出现投票界面,如图所示: ▍显示效果 在这个界面中,标题为:“欢迎给教师投票”;在界面上有一个表格,显示了各位教师的编号、姓名、得票数;其中…

使用JDBC实现QQ登录

在实际开发中&#xff0c;用户信息是存放在数据库中的&#xff0c;登录时的账号和密码信息也需要去数据库中查询&#xff0c;本节将使用JDBC技术来完善QQ登录案例。1.创建数据表&#xff0c;并添加用户数据在jdbc数据库中创建数据表tb_qquser,并在表中插入3条数据&#xff0c;其…

力扣sql简单篇练习(十七)

力扣sql简单篇练习(十七) 1 销售分析| 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 可以考虑使用all函数 SELECT seller_id FROM Sales GROUP BY seller_id HAVING sum(price)>all(SELECT sum(price)FROM SalesGROUP BY seller_id )1.3 运行…

ChatGpt : 基于OpenAI + Flask快速搭建个人领域内的Q/A问答接口—嵌入网站内知识

文章目录学习前言OpenAI简介Q/A问答接口实现流程1、网络爬虫2、构建嵌入索引3、使用嵌入构建Q/A问答系统4、基于flask框架进行接口封装5、接口测试使用学习前言 最近ChatGpt太火热了&#xff0c;赶紧来了解一波相关情况… 目前来说ChatGpt只有2021年之前的知识&#xff0c;如果…

1.6 epoll实战使用

文章目录1、连接池2、epoll两种工作模式2.1、LT模式2.2、ET模式3、后端开发面试题4、epoll验证1、连接池 将每一个套接字和一块内存进行绑定&#xff0c;连接池就是一个结构体数组&#xff0c;通过链表来维护一个空闲连接。 1、ngx_get_connection(int fd)从空闲链表取一个空闲…

MySQL 中的事务详解

前言MySQL 中的事务操作&#xff0c;要么修改都成功&#xff0c;要么就什么也不做&#xff0c;这就是事务的目的。事务有四大特性 ACID&#xff0c;原子性&#xff0c;一致性&#xff0c;隔离性&#xff0c;持久性。A(Atomic),原子性&#xff1a;指的是整个数据库事务操作是不可…

vue2版本《后台管理模式》(下)

文章目录前言一、home 页以下都属于home子组件二、header 头部 组件二、Menu 页面三、Bread 面包屑四、Footer五 、分页器&#xff1a; Pageing![在这里插入图片描述](https://img-blog.csdnimg.cn/fbe9bb7e84a04ccda4d3fc9f4ab9c36b.png#pic_center)六、权限管理总结前言 这章…