MySql(SQL)
1. <script>
标签(必看)
- 作用:MyBatis 注解中,当 SQL 包含动态标签(如
<foreach>
、<if>
等)时,必须用<script>
标签包裹,告诉 MyBatis“这是动态 SQL,需要解析内部标签”。 - 若没有
<script>
标签,MyBatis 会把<foreach>
当作普通字符串处理,导致 SQL 语法错误。
2.循环遍历 foreach(eg:list)
循环的是List<Long> id
MyBatis 框架中 <foreach>
标签的使用示例,用于在 SQL 中循环遍历集合,动态生成批量操作的语法(比如 IN
条件、批量插入的 values 等)
<foreach>
是 MyBatis 专为 “遍历集合 / 数组,拼接 SQL 片段” 设计的标签,常用于:
- 批量查询(如
SELECT * FROM table WHERE id IN (1,2,3)
); - 批量插入(如
INSERT INTO table (id) VALUES (1),(2),(3)
)。
1.各属性含义
<foreach item='item' collection='items' open='(' separator=',' close=')'> #{item} </foreach>
2. 注意事项
collection
要与参数名一致:如果 Java 传的是 List/Array,且没给参数起别名collection
要写list
或array
;如果是 Map,要写 Map 的 key。- 防止 SQL 注入:MyBatis 会自动对
#{item}
做预编译,避免 SQL 注入,不要用${item}
(直接拼接,有注入风险)。
简单来说,<foreach>
让 MyBatis 能 “循环拼接 SQL”,轻松实现批量操作,不用手动写冗长的 IN
或 VALUES
片段~
3.条件语句 if
<if test="identity!=null"> ... </if>
:
test="identity!=null"
是判断条件:当传入的 identity
参数不为 null
时,执行标签内的 SQL 片段;若 identity
为 null
,则跳过该标签,不拼接内部的 SQL。
标签内的内容 where identity=#{identity}
:
当条件成立时,拼接
WHERE
子句,筛选出identity
字段值等于参数值的记录(#{identity}
是 MyBatis 的参数占位符,用于接收传入的identity
值)。