mybatsi如何批量删除数据

2年前 (2022) 程序员胖胖胖虎阿
266 0 0

一、删除的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注解配置的参数值;
如下图接口所示:

mybatsi如何批量删除数据

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注入的风险!

版权声明:程序员胖胖胖虎阿 发表于 2022年11月3日 上午5:32。
转载请注明:mybatsi如何批量删除数据 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...