动态 SQL 是 MyBatis 的强大特性之一。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。
MyBatis 动态 SQL 查询是一种可以根据不同的查询条件生成不同 SQL 语句的功能,方便实现灵活的查询操作。
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
一、 if
<if> 标签是 MyBatis 动态 SQL 查询中使用最为广泛的一个标签,在查询条件比较复杂时,能够有效地帮助我们生成所需的 SQL 语句。
1.使用条件判断语句生成 SQL 片段
<select id="getUserList" resultMap="userResultMap">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
在上述代码中,我们使用了 <if> 标签来生成 SQL 片段,该标签内的 test 属性值为条件判断语句,当符合条件时就会执行 SQL 语句块内的内容。在上述代码中,我们通过判断 name 和 age 是否为 null,来动态生成 SQL 条件语句。
2.使用逻辑运算符组合多个条件
在上述代码中,我们只使用了单个条件,但实际查询中,多条件联合查询的情况比较常见。为此,我们可以使用 <if> 标签结合逻辑运算符来组合多个条件,例如:
<select id="getUserList" resultMap="userResultMap">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
<if test="age != null">
AND age = #{age}
</if>
&l