一、动态 SQL 简介
MyBatis 动态 SQL 允许根据条件动态拼接 SQL 语句,避免手动处理字符串拼接的复杂性和 SQL 注入风险。核心标签包括 <if>
、<where>
、<foreach>
等。以下通过示例详细讲解其用法。
二、<if>
** 标签**
用途:根据条件动态插入 SQL 片段。
属性:
test
:必填,条件表达式(基于 OGNL 语法)。
示例 1:根据 id 和 name 查询员工
<select id="findByIdAndName" resultType="cn.cjxy.domain.Emp">
SELECT * FROM EMP
<where>
<if test="id != null">
AND id = #{id} <!-- 当 id 不为空时拼接 -->
</if>
<if test="name != null">
AND name = #{name} <!-- 当 name 不为空时拼接 -->
</if>
</where>
</select>
注意:
<if>
通常与<where>
配合使用,避免单独处理WHERE
和AND
的冗余问题。- 如果所有条件均不满足,
<where>
会忽略整个WHERE
子句。
三、<where>
** 标签**
用途:智能处理 WHERE
子句,自动删除多余的 AND
或 OR
。
特性:
- 如果
<where>
内无有效条件,不会生成WHERE
关键字。 - 自动去除子句中开头的
AND
或OR
。
示例 2:多条件查询