spring boot--08

一、<foreach> 标签:批量操作神器

1. 核心作用

用于遍历集合,批量生成 SQL 片段,最常见的场景是批量删除(IN语句)、批量插入

2. 批量删除示例

业务场景:员工列表的批量删除

sql

复制代码
-- 原生SQL
delete from emp where id in (1,2,3);
1)Mapper 接口方法

java

运行

复制代码
// 批量删除方法,接收id列表
public void deleteByIds(List<Integer> ids);
2)XML 映射文件

xml

复制代码
<delete id="deleteByIds">
    delete from emp where id in
    <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>

3. 标签属性详解

表格

属性 说明
collection 要遍历的集合参数名,这里对应接口方法的参数ids
item 遍历集合时,每个元素的别名(这里用id代表列表中的单个 ID)
separator 元素之间的分隔符,这里用逗号分隔,生成1,2,3
open 遍历开始前拼接的片段,这里是(,和IN语句的括号对应
close 遍历结束后拼接的片段,这里是),闭合IN语句的括号

二、<sql><include> 标签:SQL 片段复用

1. 核心作用

  • <sql>:定义可重复使用的 SQL 片段,避免代码冗余;
  • <include>:通过refid引用定义好的 SQL 片段。

2. 代码示例

1)定义可复用 SQL 片段

xml

复制代码
<!-- 定义通用的查询字段片段 -->
<sql id="commonSelect">
    select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time 
    from emp
</sql>
2)在多个查询中引用

xml

复制代码
<!-- 条件查询 -->
<select id="list" resultType="com.itheima.pojo.Emp">
    <include refid="commonSelect"/>
    <where>
        <if test="name != null">name like concat('%', #{name}, '%')</if>
        <if test="gender != null">and gender = #{gender}</if>
        <if test="begin != null and end != null">and entrydate between #{begin} and #{end}</if>
    </where>
    order by update_time desc
</select>

<!-- 根据ID查询 -->
<select id="getById" resultType="com.itheima.pojo.Emp">
    <include refid="commonSelect"/>
    where id = #{id}
</select>

三、注意事项与最佳实践

  1. <foreach>collection参数

    • 如果接口方法的参数是List类型,collection属性值可以写list或直接写参数名(如示例中的ids);
    • 如果是Array数组类型,collection属性值写array或参数名。
  2. 批量删除的性能建议

    • 单次批量删除的数量不宜过大,避免生成过长的IN语句,影响数据库性能;
    • 超大规模批量删除建议分批次执行。
  3. <sql>片段复用

    • 适合复用查询字段、表名等固定 SQL 片段,提升代码可维护性;
    • 片段内避免包含动态 SQL(如<if>),否则可能降低可读性。
相关推荐
我是坏垠17 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant17 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_17 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长18 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke18 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
测试秃头怪18 小时前
如何评估自动化测试脚本的编写时间和维护工作量?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
姚青&18 小时前
测试左移体系
python·自动化
技术民工之路18 小时前
Python Socket编程零基础实战教程(TCP/UDP通信完整版)
python·tcp/ip·udp
戮漠summer18 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala