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>
标签。
本文原创,转载必追究版权。