mybatsi如何批量删除数据

一、删除的SQL语句

首先来看一下用sql语句如何删除表中的数据:

(1)删除表全部数据:

DELETE FROM `student`

(2)删除指定的数据:

DELETE FROM `student` WHERE id = 1;

(3)删除连贯的数据:

delete from `student` where id Between 23 and 99;

(4)删除散列的数据:

delete from `student` where id in(3,5,6,8);

(5)清空表的数据:

TRUNCATE `student`

DELETE和TRUNCATE区别

(1)相同点:都能删除数据,都不会删除表结构
(2)不同点:TRUNCATE 重新设置 自增列 计数器会归零;TRUNCATE 不会影响事务。

二、mybatsi如何批量删除数据

1.接口设计1:List类型单参数

Integer deleteByIds(List<Integer> ids);

2.接口设计2:Array数组类型单参数

Integer deleteByIds(Integer[] ids);

3.接口设计3:可变长度参数

Integer deleteByIds(Integer... ids);

以接口设计2为例的mapper.xml文件配置如下:

<delete id="deleteByIds">
    DELETE FROM t_user WHERE id IN (
    	<foreach collection="array" item="id" separator=",">
            #{id}
    	</foreach>
    )
</delete>

关于节点的配置说明:

collection:需要被遍历的对象,当抽象方法的参数只有1个且没有添加@Param注解时,如果参数类型是List集合,则取值为list,如果参数类型是数组,则取值为array;当抽象方法的参数超过1个,就一定添加了@Param注解,则取值为@Param注解配置的参数值;
如下图接口所示:

在这里插入图片描述

item:遍历过程中的每一个元素数据,当前属性可以自定义值表示元素数据的名称,在节点的子级,使用#{}占位符时,就可以使用这个名称来表示数据;

separator:遍历生成的代码片段中,各元素数据之间的分隔符号;

open / close:遍历生成的代码片段的最左侧字符串/最右侧字符串。

三、#{}和${}的区别

MyBatis允许在配置SQL语句时使用#{}和${}这2种格式的占位符来表示参数值。

简单原则:在原本使用JDBC技术编程时,编写SQL语句时可以写问号(?)的位置,都使用#{}格式的占位符,不可以写问号的位置,必须使用${}格式的占位符!

(1)使用#{}格式的占位符,只能表示某个值,MyBatis在处理时,会通过预编译的方式进行处理,即:先使用问号对占位符表示的值进行占位,并将整个SQL语句交由MySQL进行编译相关的处理(包括词法分析、语义分析、编译),当编译完成后,再将值代入到编译成功的SQL语句中一并执行。简单来说,使用#{}格式的占位符时,最终处理机制是使用了预编译的!所以,使用这种格式的占位符时,在编写SQL时不需要关心值的数据类型的问题,并且,不存在SQL注入的风险!

(2)使用${}格式的占位符,可以表示SQL语句中的任意片段。MyBatis在处理时,会先将${}格式占位符对应的值拼接到SQL语句中,然后再将SQL语句交由MySQL进行编译相关处理。

也就是说,${}的值在编译之前就已经带入到sql语句中了。

使用这种格式的占位符时,需要自行在SQL语句中考虑数据类型的问题,例如字符串类型的值需要使用一对单引号框住!另外,还存在SQL注入的风险!

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis中,可以使用foreach标签来实现批量删除操作。具体的步骤如下: 1. 在Mapper文件中,编写删除语句,使用foreach标签包裹要删除数据集合。例如: ``` <delete id="deleteByIds" parameterType="java.util.List"> DELETE FROM table_name WHERE id IN <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> #{item} </foreach> </delete> ``` 2. 在Java代码中,调用Mapper接口的对应方法来执行删除操作。例如: ``` List<Integer> ids = Arrays.asList(1, 2, 3); mapper.deleteByIds(ids); ``` 通过以上步骤,就可以实现MyBatis中的批量删除操作了。在删除语句中,使用foreach标签来循环遍历要删除数据集合,并将其拼接到SQL语句中的IN条件中。这样就可以同时删除多条数据了。 [2 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mybatsi如何批量删除数据](https://blog.csdn.net/rqt1013_/article/details/125494796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mybatis实现批量删除](https://blog.csdn.net/weixin_44239550/article/details/128284516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值