mybatis choose when 和if区别
时间: 2023-12-16 19:57:07 浏览: 148
MyBatis中的`<choose>`和`<if>`标签都可以用于动态SQL语句的编写,但是它们的使用场景不同。
- `<if>`标签用于单条件判断,根据条件是否成立动态生成SQL语句片段,通常用于简单的条件判断,例如:
```xml
<select id="getUserByName" parameterType="string" resultType="User">
SELECT * FROM user WHERE
<if test="name != null">
name = #{name}
</if>
</select>
```
当传入参数name不为null时,SQL语句会动态生成为`SELECT * FROM user WHERE name = #{name}`,否则会忽略该条件。
- `<choose>`标签相当于Java中的`switch`语句,可以根据多个条件中的一个来生成SQL语句片段。`<choose>`标签下可以有多个`<when>`标签和一个`<otherwise>`标签,每个`<when>`标签都有一个`test`属性用于表示条件是否成立,只有第一个符合条件的`<when>`标签会被执行,如果所有的`<when>`标签都不符合条件,则会执行`<otherwise>`标签中的内容。例如:
```xml
<select id="getUserByCondition" parameterType="map" resultType="User">
SELECT * FROM user WHERE
<choose>
<when test="name != null">
name = #{name}
</when>
<when test="age != null">
age = #{age}
</when>
<otherwise>
1=1
</otherwise>
</choose>
</select>
```
当传入参数中有name时,SQL语句会动态生成为`SELECT * FROM user WHERE name = #{name}`;当传入参数中有age时,SQL语句会动态生成为`SELECT * FROM user WHERE age = #{age}`;当传入参数中既没有name也没有age时,SQL语句会动态生成为`SELECT * FROM user WHERE 1=1`。
阅读全文