MyBatis案例 | 使用映射配置文件实现CRUD操作——删除数据

news/2024/12/4 15:13:30/

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏
本专栏地址:🔥JavaWeb
Java入门篇: 🔥Java基础学习篇
Java进阶学习篇(持续更新中):🔑Java进阶学习篇

在这里插入图片描述
本系列文章会将讲述有关于如何使用MyBatis完成增删查改的操作,预计本系列文章会有以下这些文章,在写完本系列的文章后会有一篇文章罗列这些文章以及其地址(传送门)小伙伴们直接点击查看即可

文章名称文章地址
查询所有数据使用映射配置文件实现CRUD操作——查询所有数据
查询详情使用映射配置文件实现CRUD操作——通过主键查询对应数据
使用映射配置文件实现CRUD操作——多条件查询
使用映射配置文件实现CRUD操作——动态SQL优化条件查询
添加数据使用映射配置文件实现CRUD操作——添加数据
修改全部字段 &修改动态字段使用映射配置文件实现CRUD操作——修改数据
删除一条数据&批量删除数据

一、前言

本文将讲述有关于删除数据的相关知识点。同样的,这里有删除单条数据和批量删除数据,使用的方法不同,所以这里会写两个不同的方法来分别实现这两个效果

二、删除单条数据

1.BrandMapper接口

这里构造一个含参数的方法,参数部分传递需要删除数据对应的id

void deleteById(int id);

2.SQL语句

删除语句的语法是DELETE FROM 表名 WHERE 条件··· 删除单条语句的语法也很简单,这里由于不知道传递的id是什么,所以要用一个参数占位符来写

    <delete id="deleteById">delete from tb_brand where id = #{id};</delete>

3.测试类

这里只需要传递一个需要删除的数据的id即可,这里就不再列出代码,在下面讲述批量删除数据的时候会写出具体的代码

//执行方法
brandMapper.deleteById(id);

三、批量删除数据

1.BrandMapper接口

由于我们要删除多个数据,那么就要把需要删除数据的id(主键)添加到一个集合中,到时候只需要删除集合内的id即可;要注意的是:MyBatis 会将数组参数封装成Map集合,key名称为array,所以要使用@Param注解改变Map集合默认名称,改为我们所希望的名称,那么就要把这个名称传递到注解后的参数中

void deleteByIds(@Param("ids") int[] ids);

2.SQL语句

按照语法,应该是DELETE FROM 表名 WHERE id IN ···,但是由于我们是以数组形式来存储id的,所以要遍历数组取出id,再删除对应的数据。在MyBatis中,有foreach标签帮助我们遍历数组,在这个标签中,还有几个需要知道的标签

  • collection:数组名称

  • separator:分隔符

  • open:起始处拼接符号

  • close:结束时拼接符号

    <delete id="deleteByIds"><!--separator:分隔符open:起始处拼接符号close:结束时拼接符号-->delete from tb_brand where idin (<foreach collection="ids" item="id" separator="," >#{id}</foreach>);</delete>

这里还有另一种写法:加上标签open="(" close=")",但是要注意 in后面的括号要删除,否则会报错:java.sql.SQLException: Operand should contain 1 column(s)

在这里插入图片描述

    <delete id="deleteByIds"><!--separator:分隔符open:起始处拼接符号close:结束时拼接符号-->delete from tb_brand where idin <foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach>;</delete>

3.测试类

在传递参数时,要注意传递的是刚刚我们自己设定的数组名称

public class MyBatisTest_deleteByIds {@Testpublic void deleteByIds() throws IOException {//接收参数int[] ids = {5,6};//加载MyBatis的核心配置文件,获取SqlSessionFactoryString resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//SqlSession获取对象SqlSession sqlSession = sqlSessionFactory.openSession();//获取BrandMapper接口代理对象BrandMapper brandMapper= sqlSession.getMapper(BrandMapper.class);//执行方法brandMapper.deleteByIds(ids);//提交事务sqlSession.commit();//释放资源sqlSession.close();}
}

我们刷新一下,看表格中是否还有id为5和6的数据,发现全部被删除了,也就是说可以实现批量删除数据的功能
在这里插入图片描述

四、结语

至此,使用MyBatis实现CRUD操作(使用配置文件形式)已经全部都讲解完毕了,所有的链接也在文章开头处的表格中了,有需要的小伙伴可以自己点击链接查看。接下来会讲述新的知识点


http://www.ppmy.cn/news/24990.html

相关文章

如何在Qt中设置背景图片,且不覆盖其它控件

正常情况&#xff0c;我们直接通过在样式表里设置背景图片会出现背景图片覆盖其它控件的情况&#xff0c;比如下面操作&#xff1a; 首先右击空白处&#xff0c;点击改变样式表。 然后选择background-image 然后点击铅笔图标 之后我们要先添加前缀&#xff0c;也就是我们…

Oracle Data Guard 角色转换(Role Transitions)

查询视图V$DATABASE的DATABASE_ROLE列可以看到数据库当前的角色。 1&#xff0e;角色转换介绍 Oracle Data Guard让你可以使用SQL语句或者通过Oracle Data Guard broker界面来动态更改数据库的角色&#xff0c;Oracle Data Guard支持以下的角色转换&#xff1a; 1&#xff0…

分布式事务解决方案——TCC

TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)&#xff0c;此阶段仅是一个初步操作&#xff0c;它和后续的Confirm一起才能真正构成…

七大排序算法的多语言代码实现

文章目录 前言 一、排序算法 1.原理简述 2.分类与复杂度 二、实例代码 1.冒泡排序 C Python Java Golang Rust Dephi 2.选择排序 C Python Java Golang Rust Dephi 3.插入排序 C Python Java Golang Rust Dephi 4.希尔排序 ​编辑 C Python Java Gola…

ASP.NET Core MVC 项目 AOP之ActionFilterAttribute

目录 一:说明 二:实现ActionFilterAttribute父类 一:说明 ActionFilterAttribute比前两者简单方便,易于扩展,不易产生代码冗余。 ActionFilterAttribute过滤器执行顺序: 1:执行控制器中的构造函数,实例化控制器 2:执行ActionFilterAttribute.OnActionExecutionA…

【Spring Cloud Alibaba】(三)OpenFeign扩展点实战 + 源码详解

系列目录 【Spring Cloud Alibaba】&#xff08;一&#xff09;微服务介绍 及 Nacos注册中心实战 【Spring Cloud Alibaba】&#xff08;二&#xff09;微服务调用组件Feign原理实战 本文目录系列目录前言一、Feign扩展点配置二、OpenFeign扩展点配置1. 通过配置文件配置有效范…

【Vue3 组件封装】vue3 轮播图组件封装

文章目录轮播图功能-获取数据轮播图-通用轮播图组件轮播图-数据渲染轮播图-逻辑封装轮播图功能-获取数据 目标: 基于pinia获取轮播图数据 核心代码&#xff1a; &#xff08;1&#xff09;在types/data.d.ts文件中定义轮播图数据的类型声明 // 所有接口的通用类型 export typ…

车联网之电子围栏中ConnectStreamed应用【二十】

文章目录 1. 电子围栏中ConnectStreamed应用1.1 ConnectedStreams简介1.1.1 connect流说明1.1.2 connect流使用场景1.2 Broadcast+Connect+CoFlatmap+CoMap整合实战1.3 两点之间球面距离计算1.4 电子围栏中自定义对象实现CoFlatMap函数1. 电子围栏中ConnectStreamed应用 1.1 C…