用法介绍

choose 标签作用是通过条件判断来拼接 SQL 语句,类似于 Java 中的 switch 语句,从上到下,当有匹配的条件时,跳出 choose 语句;如果所有条件都不成立则执行 otherwise 标签中的内容

语法格式为:

<choose><when test=条件1>...</when><when test=条件2>...</when><when test=条件3>...</when>...<otherwise>...</otherwise>
</choose>

使用细节

当有条件成立时,就不会继续执行了。

今天就碰到一个同事写的代码,功能是:年月日三个维度查询报表数据


后端使用四个字段来接收前端传的参数,分别是:

  • 日查询为:startDate,endDate
  • 月查询为:ymDate
  • 年查询为:yDate

而这个同事在实现这个功能时,采用了 choose 标签来实现,他的 SQL 语句拼接为:

<choose><when test="query.startDate != null and query.startDate != '' and query.endDate != null and query.endDate != ''">and DATE_FORMAT(treat_start_time,'%Y-%m-%d') between #{query.startDate} and #{query.endDate}</when><when test="query.ymDate != null and query.ymDate != ''">and DATE_FORMAT(treat_start_time,'%Y-%m') = #{query.ymDate}</when><when test="query.yDate != null and query.yDate != ''">and DATE_FORMAT(treat_start_time,'%Y') = #{query.yDate}</when>
</choose>

然后就有测试的同学反馈说,为什么只有按 查询可以查到数据,按 都查不到数据,下面给出三种查询的传参:

{"startDate": "2022","endDate": "2022","ydate": "2022","ymDate": "2022-05",
}
{"startDate": "2022-05","endDate": "2022-05","ymDate": "2022-05",
}
{"startDate": "2022-05-30","endDate": "2022-05-30","ydate": null,"ymDate": null,
}

按照他的这种传参方式及 choose 判断方式分析,choose 只会执行第一个条件判断。解决办法为调整 when 条件的判断顺序为:

<choose><when test="query.yDate != null and query.yDate != ''">and DATE_FORMAT(treat_start_time,'%Y') = #{query.yDate}</when><when test="query.ymDate != null and query.ymDate != ''">and DATE_FORMAT(treat_start_time,'%Y-%m') = #{query.ymDate}</when><when test="query.startDate != null and query.startDate != '' and query.endDate != null and query.endDate != ''">and DATE_FORMAT(treat_start_time,'%Y-%m-%d') between #{query.startDate} and #{query.endDate}</when>
</choose>

总结

使用 choose 标签的时候,一定要注意最先需要判断的条件要放在前面,当匹配到某个条件时,就不会判断后面的语句了。

Mybatis - <choose> 标签的用法相关推荐

  1. mybatis choose标签的用法

    先上代码: <choose> <when test="BEGINTIME != null and BEGINTIME != '' and ENDTIME != null a ...

  2. MySQL中choose标签的用法

    MySQL中标签的用法 先给大家来个SQL语句: choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中 的 choose 很类似. SELECT ...

  3. mybatis choose标签的使用

    有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个.而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件.MyBatis 提供了 choose 元素.if标签是 ...

  4. MyBatis if标签的用法

    <!--4.1.1 在WHERE条件中使用if需求:实现一个用户管理高级查询功能,根据输入的条件去检索用户信息.这个功能还需要支持以下三种情况:当只有输入用户名时,需要根据用户名进行模糊查询:当 ...

  5. mybatis choose when用法

    mybatis choose when的用法: mapper.xml: <select id="query" resultType="map" param ...

  6. mybatis中<choose>标签的用法

    choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose 结束.当 choose 中所有 when 的条件都不满则时,则执行 otherwis ...

  7. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  8. MyBatis choose、when和otherwise标签简介说明

    转自: MyBatis choose.when和otherwise标签简介说明 MyBatis 中动态语句 choose-when-otherwise其功能: 同Java中的switch-case-d ...

  9. Mybatis的choose标签

    1.choose标签介绍 choose标签作用条件判断来拼接指定的条件,它和if不太相同,choose似类于java中的switch语句用法,直要有条件成立,其它判断将得不到执行,如果所有条件都不成立 ...

  10. mybatis choose用法

    choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束.当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的s ...

最新文章

  1. Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)
  2. 【译】SQL Server误区30日谈-Day7-一个实例多个镜像和日志传送延迟
  3. C# main函数的返回值 - 译
  4. awk 分隔符 多个空格_如何在awk中指定多个分隔符
  5. python selenium webdriver入门基本操作
  6. JQuery放大镜效果
  7. vba 跳到下一个循环_遍历工作薄和工作表(For Each循环的利用)
  8. NodeJS 使用官方oracledb库连接数据库教程
  9. qt添加菜单纯代码_QtCreator插件开发(二)——QtCreator菜单和菜单项
  10. 关于socket组播和ssdp(一)[修改1.2]
  11. 获取 python import模块的路径
  12. 【论文投稿】SOTA论文也未必能被接收,谷歌科学家Eric Jang谈顶会审稿标准
  13. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_16_注解_自定义注解_元注解...
  14. 离散数学——主析取范式与主合取范式原理探究
  15. css中border属性设置
  16. 天津等保测评机构项目测评收费价格标准参考
  17. java调用腾讯企业邮箱给谷歌(gmail)邮箱发送邮件丢失或进入垃圾邮箱
  18. 牧牛海派战法,区块链对经济社会的影响
  19. 不积小流,无以成江海;不积跬步,无以至千里
  20. python编写的动物识别专家系统_基于Python的动物识别专家系统

热门文章

  1. Mapbox添加图片层
  2. #最短路径,最小生成树#CH 6202 黑暗城堡
  3. linux-netstat的用法-netstat12种网络连接状态
  4. 苹果手机sim卡无效怎么办_苹果手机存储空间不足怎么办
  5. R语言中同比增长和环比增长
  6. java-贪吃蛇小游戏
  7. To invoke and to begin invoke, that is a question.
  8. idea怎么光标多选
  9. BAS:天牛须搜索智能优化算法
  10. 拆轮子之Fish动画分析