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

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

场景需要,有时候某个字段不为空,一个查询条件,为空的时候,有另一个查询条件。需要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动态加载复选框checkbox(XML串)

 首先,使用JS动态产生Checkbox可以采用如下类似的语句:代码如下:var checkBox=document.createElement("input");che...

每次开机checking file system on d

 解决方案:点击左下角(开始)- (运行)输入(CMD)回车 - 进入CMD界面- 输入(d:)回车 - 输入(chkdsk /f)中间有空格。回车,出现提示按Y键,完成后,重启一次会检...

多说评论框怎么用更好

 1.隐藏屏蔽掉多说评论框的版权链接代码?简单css实现:多说隐藏版权链接,在后台自定义css添加:#ds-thread #ds-reset .ds-powered-by { display...

MyEclipse 10安装svn

MyEclipse 10安装svn

 方法一:在线安装(推荐)1.打开HELP->MyEclipse ConfigurationCenter。切换到SoftWare标签页。 2.点击Add Site 打开对话框...

freeMarker Jfinal 获取session里的值

问题:freeMaker session取值的常用格式都试过 session["xxx"],session.xxx 直接xxx 都取不出来?????解决:JFinal与Struts...

目标管理法——目标分解法

让自己的人生更幸福更有意义关键是:要将梦想转化为具体的目标,然后合理的分解,达到量化,指标化!现将学习到的两种非常有效的目标分解法分享给所有梦想、有激情的朋友:祝愿大家都能梦想成真! 一、俄...

评论列表

发表评论

访客

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