Mybatis 如何批量删除数据的实现示例

 更新时间:2021年03月05日 14:12:32   作者:纵有千千星晚  
这篇文章主要介绍了Mybatis 如何批量删除数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本期以最常用的根据id批量删除数据为例:

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

Integer deleteByIds(List<Integer> ids);

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

Integer deleteByIds(Integer[] ids);

接口设计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>

关于<foreach>节点的配置说明:

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

如下图接口所示:

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

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

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

补充知识点:关于#{}和${}格式的占位符

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

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

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

使用${}格式的占位符,可以表示SQL语句中的任意片段!MyBatis在处理时,会先将${}格式占位符对应的值拼接到SQL语句中,然后再将SQL语句交由MySQL进行编译相关处理,也就是说,${}格式占位符的值在编译之前就已经代入到SQL语句中了!很显然,在处理${}格式的占位符时,没有(也不可能)使用预编译!所以,使用这种格式的占位符时,需要自行在SQL语句中考虑数据类型的问题,例如字符串类型的值需要使用一对单引号框住!另外,还存在SQL注入的风险!

到此这篇关于Mybatis 如何批量删除数据的实现示例的文章就介绍到这了,更多相关Mybatis 批量删除数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

    使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

    Undertow是一个非常轻量并高性能的web server,它来自 JBoss。支持blocking和non-blocking两种NIO API。接下来通过本文给大家介绍使用Spring Boot 内嵌容器 Undertow创建服务器的方法,感兴趣的朋友一起看看吧
    2017-11-11
  • SpringBoot整合MOTT动态读取数据库连接信息并连接MQTT服务端

    SpringBoot整合MOTT动态读取数据库连接信息并连接MQTT服务端

    MQTT是一种轻量级的消息传输协议(Message Queuing Telemetry Transport),旨在实现设备之间的低带宽和高延迟的通信,本文给大家介绍了SpringBoot整合MOTT动态读取数据库连接信息并连接MQTT服务端,需要的朋友可以参考下
    2024-04-04
  • Java初始化块及执行过程解析

    Java初始化块及执行过程解析

    这篇文章主要介绍了Java初始化块及执行过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring Boot超大文件上传实现秒传功能

    Spring Boot超大文件上传实现秒传功能

    这篇文章主要介绍了Spring Boot超大文件上传实现秒传功能,在实现分片上传的过程,需要前端和后端配合,比如前后端的上传块号的文件大小,前后端必须得要一致,否则上传就会有问题,需要的朋友可以参考下
    2022-12-12
  • springboot集成WebSockets广播消息(推荐)

    springboot集成WebSockets广播消息(推荐)

    这篇文章主要介绍了springboot-集成WebSockets广播消息,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • springboot集成redis哨兵集群的实现示例

    springboot集成redis哨兵集群的实现示例

    本文主要介绍了springboot集成redis哨兵集群的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Java中超详细this与super的概念和用法

    Java中超详细this与super的概念和用法

    这篇文章主要介绍了Java中超详细this与super的概念和用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • springboot关闭druid监控 druid2改配置文件无效的解决

    springboot关闭druid监控 druid2改配置文件无效的解决

    这篇文章主要介绍了springboot关闭druid监控 druid2改配置文件无效的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐)

    SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐)

    这篇文章主要介绍了SpringBoot全局异常处理之多个处理器匹配顺序(最新推荐),调试源码可见匹配顺序为:异常层级高者优先,再清楚点,子类异常处理器优先,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-03-03
  • Java 基础 byte[]与各种数据类型互相转换的简单示例

    Java 基础 byte[]与各种数据类型互相转换的简单示例

    这篇文章主要介绍了Java 基础 byte[]与各种数据类型互相转换的简单示例的相关资料,这里对byte[]类型对long,int,double,float,short,cahr,object,string类型相互转换的实例,需要的朋友可以参考下
    2017-01-01

最新评论