MyBatis如何实现 if-else 的逻辑效果及判断条件
场景需要,有时候某个字段不为空,一个查询条件,为空的时候,有另一个查询条件。需要ifelse的逻辑实现。
在 MyBatis 的动态 SQL 中,虽然没有直接的 else 语句,但你可以使用 <choose>, <when>, 和 <otherwise> 标签来实现类似 if-else 的逻辑。这些标签允许你在构建 SQL 语句时根据条件选择不同的片段。
下面是一个使用 <choose>, <when>, 和 <otherwise> 标签的例子:
<select id="selectUserByCondition" parameterType="map" resultType="User">
SELECT * FROM users
WHERE 1=1
<choose>
<when test="name != null and name != ''">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
<!-- 当上面所有条件都不满足时执行的 SQL 片段 -->
AND 1=0 <!-- 这通常用于确保没有结果返回,或者你可以根据需要自定义 -->
</otherwise>
</choose>
</select>在这个例子中,如果 name 不为空且不为空字符串,则会添加 AND name = #{name} 条件。如果 name 不满足条件但 age 不为 null,则会添加 AND age = #{age} 条件。如果 name 和 age 都不满足条件,则会执行 <otherwise> 标签中的 SQL 片段。
需要注意的是,<otherwise> 标签是可选的,并且当所有 <when> 条件都不满足时才会执行其中的内容。如果你不需要处理所有条件都不满足的情况,可以省略 <otherwise> 标签。
另外,虽然 <otherwise> 提供了一种“否则”的逻辑,但它并不完全等同于编程中的 else 语句,因为它是在动态 SQL 构建过程中使用的,并且只影响 SQL 语句的生成。在编写动态 SQL 时,你需要根据实际的业务需求来决定是否使用 <choose>, <when>, 和 <otherwise> 标签。
本文原创,转载必追究版权。


