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

萨瓦迪卡1年前 (2025-01-09)java技术1231

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


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

分享给朋友:

相关文章

java将金额转化为大写金额

 private static String[] num = {"零","壹","贰","叁","肆...

get方式调用http接口   Header赋参数值

get方式调用http接口 Header赋参数值

   /**      195.     * 发送...

MyEclipse 10 性能大优化

MyEclipse 10 性能大优化

 MyEclipse 10已发布,新版本的特性能够大大提高开发者的效率。但同时,由于电脑配置的原因,很多开发者在使用MyEclipse的时候,速度都不是很快,需要我们对MyEclipse进行...

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

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

jquery 操作html元素(及CSS)

jquery 操作html元素(及CSS)

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

office 2010安装、激活、激活工具下载

office 2010安装、激活、激活工具下载

 首先下载好工具包(包括office 2010安装程序、激活工具及Microsoft .NET Framework 4.0),点击工具包下载进行下载;安装好office 2010。如果是wi...

评论列表

发表评论

访客

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