MyBatis如何实现 if-else 的逻辑效果及判断条件

萨瓦迪卡2年前 (2025-01-09)java技术1417

场景需要,有时候某个字段不为空,一个查询条件,为空的时候,有另一个查询条件。需要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> 标签。


本文原创,转载必追究版权。

分享给朋友:

相关文章

js/jquery 实现点击图片更换头像(图片)实例

    总之一句话, 可以先将 file类型 的input 隐藏 起来,通过 图片(头像)的onclick事件 来触发 file 的onclick事件。1.引入外部js:...

jquery 操作html元素(及CSS)

jquery 操作html元素(及CSS)

 $("li").addClass("aui-user-view-cell aui-img") ;  //给元素添加样式$('#a1...

程序员为什么不炫富

程序员为什么不炫富

 提到互联网,尤其是互联网工程师们,人们往往会想到两个词:“高薪”和“高压”。在知乎上“为什么很少见工资高的程序员炫富?”的问题下,一个得票很高的答案是:“乐意炫富的人,不是因为有钱,而是因为付出的少...

ajax提交表单、ajax实现文件上传(multipart/form-data)

方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单方式二:使用jquery的$.ajax({..}), 支持提交普通表单,但不支持...

java 实现自增编号+Oracle序列

原理:a,a++,fillStr(a, 9, false, "0");新建序列:create sequence seq_lineminvalue 1maxvalue 9999999...

Java判断是数字还是字符串

方法一:利用正则表达式public class Testone {public static void main(String[] ...

评论列表

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。