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

choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

例如下面例子,同样把所有可以限制的条件都写上,方面使用。choose会从上到下选择一个when标签的test为true的sql执行。安全考虑,我们使用where将choose包起来,放置关键字多于错误。

<!--  choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 -->
<select id="selectControlTableColumnByTableColumnIdAndIsUpdateOrIsDelete"  parameterType="com.uama.mdm.model.mdata.MdControlTableColumn" resultMap="BaseResultMap">SELECT<include refid="Base_Column_list"></include>FROM md_control_table_column u<where><choose><when test="isUpdate !=null ">AND u.is_update = #{isUpdate, jdbcType=INTEGER}</when><when test="isDelete != null">AND u.is_delete = #{isDelete, jdbcType=INTEGER}</when><otherwise></otherwise></choose><if test="tableColumnId != null">AND table_column_id = #{tableColumnId}</if></where></select>

choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中 的 choose 很类似。

<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">select * from t_blog where 1 = 1 <choose><when test="title != null">and title = #{title}</when><when test="content != null">and content = #{content}</when><otherwise>and owner = "owner1"</otherwise></choose></select>

when元素表示当 when 中的条件满足的时候就输出其中的内容,跟 JAVA 中的 switch 效果差不多的是按照条件的顺序,当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出 otherwise 中的内容。所以上述语句的意思非常简单, 当 title!=null 的时候就输出 and titlte = #{title},不再往下判断条件,当title为空且 content!=null 的时候就输出 and content = #{content},当所有条件都不满足的时候就输出 otherwise 中的内容。

下面是我的业务代码

  <!--批量修改--><update id="batchUpd" parameterType="java.util.HashMap">UPDATEyz_card_brief<set><if test="msisdn!=null and myUpdType!=1">msisdn = #{msisdn},</if><if test="iccid!=null and myUpdType!=2">iccid = #{iccid},</if></set><where><choose><when test="myUpdType!=null"><if test="myUpdType==1">msisdn = #{msisdn}</if><if test="myUpdType==2">iccid = #{iccid}</if><if test="myUpdType==0">vid = #{vid}</if></when><otherwise>vid = #{vid}</otherwise></choose></where></update>

Mybatis之choose(where,otherwise)标签相关推荐

  1. Mybatis常用的动态SQL标签讲解

    先让我们看看mybatis常用动态SQL的标签有哪一些 如果mybatis和SSM整合环境不会搭建请看这篇 https://blog.csdn.net/weixin_44012722/article/ ...

  2. MyBatis中动态sql语句标签详解

    动态 SQL 通常写在mapper包下面的地址映射配置文件(.xml)中.根据条件的不同, SQL 语句也会随之动态的改变. MyBatis 中,提供了一组标签用于实现动态 SQL. 动态SQL语句标 ...

  3. MyBatis——动态SQL语句——if标签和where标签复合使用

    功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...

  4. MyBatis中如何使用insert标签呢?

    转自: MyBatis中如何使用insert标签呢? MyBatis insert 标签的功能  MyBatis insert标签的功能,用于定义一个插入语句,执行插入操作,   MyBatis运行完 ...

  5. MyBatis中如何使用update标签呢?

    转自: MyBatis中如何使用update标签呢? MyBatis update 标签的功能: 用于定义一条更新语句,运行相关的更新操作. 当 MyBatis 执行完一条更新语句后,会返回一个整数, ...

  6. Mybatis choose (when, otherwise)标签

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

  7. Mybatis的choose标签

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

  8. Mybatis基础知识点:trim标签的使用

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wt_better blog.csdn.net/wt_bet ...

  9. Mybatis简单入门及配置文件标签详情

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 什么是ORM框架 ORM 的全拼是Object Relational Mapping,也就是对象与关系的映射,对象是程序里面的对象,关系是它与数 ...

  10. mybatis常用判断语法(标签)

    作为java开发,我们常用的判断有if.switch语句,其实在MyBatis中也有对应的标签,用于动态生成sql语句. 1. if判断 <where><if test=" ...

最新文章

  1. heritrix 3.2.0 -- 环境搭建
  2. 高校新校园网络系统设计方案
  3. hud抬头显示器哪个好_还在看汽车仪盘表?带你了解一下HUD抬头显示器,开车很方便...
  4. 比较array相等_如何处理JavaScript比较中的临界问题
  5. 发送邮件代码--ASP.NET中常用代码之一
  6. 恢复win8桌面上计算机图标,win8系统桌面我的电脑图标不见了如何找回
  7. Nginx入门到实战(4)常见问题
  8. maven deploy jar包到远程仓库400
  9. oracle如何复制表的索引,Oracle表与索引管理
  10. HTML的map-area的使用
  11. ga tsp matlab,遗传算法(GA)求解TSP问题MATLAB程序
  12. 【java】CGLIB动态代理原理分析
  13. 比特币 转账交易为什么要等6个区块确认才算到账 安全 以太坊12个区块
  14. LINUX虚拟机安装增强功能时报错:/sbin/mount.vboxsf: mounting failed with the error: No such device
  15. 什么叫0day和warez
  16. 抖音怎么投放广告,抖音广告投放效果
  17. Kmplayer音频设置
  18. go语言黑帽子学习3
  19. 超简单集成华为HMS Core MLKit 机器学习服务银行卡识别SDK,一键实现银行卡绑定
  20. Java:XML之JavaSE SAX解析

热门文章

  1. mc服务器切换模式显示英文字母,我的世界更改模式的指令是什么_MC切换模式指令方法新版...
  2. python标准差不用numpy_Python:Numpy标准差
  3. java 小游戏Flappy bird的源码以及图片素材
  4. C++: decay关键字的作用
  5. JAVA编写弹珠(弹珠)小游戏
  6. 微信开发工具出现 [渲染层网络层错误]
  7. 只有一个源视频的Deepfakes简介
  8. Swift零基础学习之用TableView做个景点App
  9. VC dll依赖性查看工具depends
  10. 回答缺点?这样回答HR听完直呼大佬!