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>),否则可能降低可读性。
相关推荐
金銀銅鐵14 分钟前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio4 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663675 小时前
使用 Python 从零创建 Word 文档
python
Csvn10 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽11 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户5569188175313 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱1 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi001 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用