Mybatis之choose (when, otherwise)标签

2023-11-16

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 中的内容。

--------------------------------------------------------------------------------------------------------------------------------------------------------

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis之choose (when, otherwise)标签 的相关文章

  • 【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P21-26(Day1昨天忘记发布了)

    Java小技巧 idea下 psvm tab键 补全 public static void main String args sout enter键 鼠标点击选择 可以实现补全 System out println System out p
  • java8中的lambda表达式,看这篇就够了

    Lambda表达式 Lambda是简洁的标识可传递匿名函数的一种方式 互动 事件驱动下 最终面向对象编程和函数式编程结合才是趋势 java中 一段代码的传递并不容易 因为JAVA是面向对象的语言 如果要传递一段代码 必须先构建类 再生成对应
  • Log4j详解

    Log4j主要由 Loggers 日志记录器 Appenders 输出控制器 和 Layout 日志格式化器 组成 其中 Loggers 控制日志的输出以及输出级别 JUL做日志级别Level Appenders 指定日志的输出方式 输出到
  • Java集合框架

    文章目录 一 简介 1 集合框架介绍 2 相关容器介绍 2 1 Set相关 2 2 List相关 2 3 Queue相关 2 4 Map相关 3 集合重点 二 ArrayList分析 1 ArrayList使用 2 ArrayList介绍
  • Java概述

    文章目录 一 Java简介 1 1 Java版本 1 2 Java特点 二 Java运行机制 2 1 Java运行过程 2 2 JDK JRE JVM 三 Java开发环境 3 1 下载 安装JDK 3 2 配置环境变量 四 Java开发规
  • java定时任务实现的几种方式

    摘要 在开发测试工具的应用后台 经常听到同事说要做个定时任务把做日志处理 或者数据清理 包括做些复杂的业务计算逻辑 在选择定时任务的时候 怎么能够快速实现 并且选择一种更适合自己的方式呢 我这里把定时任务的实现收集整理了一些方法 希望可以帮
  • HttpClient工具类(包含请求头设置及请求示例)

    import java io BufferedReader import java io DataOutputStream import java io EOFException import java io IOException imp
  • Java基础——Object类和Objects工具类

    目录 1 Object类 1 1 常用方法 1 2 Object类中方法常见的问题 1 为什么重写equals时必须重写hashCode方法 2 wait和notify为什么定义在Object类当中 wait和notify或notifyAl
  • Java核心技术卷 学习Day02

    java学习 复习 本文主要参照 Java核心技术卷 作为学习对象 第四章 对象与类 1 类 面向对象程序设计OOP 类 封装实例字段 方法 类 gt 继承 is a 依赖 uses a 聚合 has a gt 类 2 预定义类 Math
  • 判断OBject对象为空(包括null ,““)的方法

    这篇文章主要介绍了Java判断对象是否为空 包括null 的方法 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录标题 对象之间判断需要了解的 代码示例 问题原因 注
  • logback的使用和logback.xml详解

    Java 的简单日志外观 SLF4J 用作各种日志框架 例如 java util logging logback log4j 的简单外观或抽象 允许最终用户在部署时插入所需的日志框架 就是Java设计模式当中的门面模式 SLF4J只是个门面
  • java程序的执行结构(顺序、分支、循环)

    目录 一 顺序流程 二 分支流程控制 1 分支结构的概念 2 流程控制 分支 if else 的使用 分支 switch case 的使用 三 循环流程结构 1 循环结构的概念 2 循环结构的三要素 3 循环控制 for循环 while循环
  • BigDecimal类型加减乘除运算(Java必备知识)

    在现实开发当中经常会遇到这种计算 这里特此整理一下为方便以后学习 希望能帮助到其他的萌新 目录 1 为什么要用BigDecimal计算 2 浮点计算误差产生的原因 3 bigdecimal的初始化 4 bigdecimal的加减乘除 5 除
  • Mybatis之choose (when, otherwise)标签

    choose when otherwise 标签 有时候我们并不想应用所有的条件 而只是想从多个选项中选择一个 而使用if标签时 只要test中的表达式为 true 就会执行 if 标签中的条件 MyBatis 提供了 choose 元素
  • Java当中读取Json文件转换为Java对象

    这里我用的是一个hutool工具包 里面包含了很多丰富的util 并且还有中文的API
  • javac 命令 javac 命令大全详解---推荐看

    javac 命令 javac 命令大全详解 温柔一刀的技术博客 51CTO博客 1 javac 命令 用法 javac
  • List转int类型数组

    在刷题过程中 想把一个List
  • Java当中解析ini文件对应到JavaBean当中

    目录 1 ini文件简介 2 ini文件 3 ini解析工具类 4 示例运行结果 1 ini文件简介 ini 文件是Initialization File的缩写 即初始化文件 是windows的系统配置文件所采用的存储格式 统管window
  • Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题

    接上篇 Java算法 华为机试算法 上 华为算法Java版 牛客网华为算法1 54题 HJ55 练习用 挑7 挑7 题目描述 输出7有关数字的个数 包括7的倍数 还有包含7的数字 如17 27 37 70 71 72 73 的个数 一组测试
  • java 生成 UUID

    java 生成 UUID 1 生成 UUID import cn hutool core util IdUtil public class IdUtilTest public static void main String args 获取随

随机推荐

  • UE4-DeltaTime(时间增量)

    UE4 DeltaTime 时间增量 Time 2020年10月14日13 33 52 Author Yblackd UE4 DeltaTime 1 结论 2 deltaTime 增量时间 3 为什么乘以 时间增量 4 注意误区 5 参考
  • Linux:Xorg占用现存过大问题

    usr lib xorg Xorg占用3692 MB显存 导致程序出现CUDA out of memory问题 解决方案 1 Ctrl Alt F1 F7 关闭图形界面 输入用户名 密码 输入nvidia smi查看GPU使用情况 发现明显
  • 中国电子信息制造产业运营模式及未来投资方向建议报告2022版

    中国电子信息制造产业运营模式及未来投资方向建议报告2022版 修订日期 2022年2月 出版单位 鸿晟信合研究院 对接人员 周文文 内容分析有删减 了解详情可查看咨询鸿晟信合研究院专员 目录 第1章 中国电子信息制造业发展环境分析 1 1
  • stable diffusion webui 教程:安装与入门

    stable diffusion webui 安装与入门 原理简介 一 源码仓库 二 模型库地址 三 在 Windows 上自动安装步骤 安装Python 安装git 下载源代码 编辑 webui user bat 四 如何打开 五 依据文
  • PHP 创建派生类对象时基类部分问题

    之前我以为在派生类的构造函数中 在调用基类的构造函数前是不能使用基类成员的 因为基类对象还未构造 其中的成员也不存在 但在以下测试中发现 在调用基类的构造函数前基类中的成员已经存在 基类构造函数只是改变了基类中成员的值 class base
  • Android Studio3.4.2新建C++项目,CMakeLists批量添加代码编译不过的坑

    上段时间升级了AS到3 4 2 最后新建了个C 的项目 然后生成的那个native lib cpp文件就可以编译 但是我的项目里 C 代码文件非常多 显然一个一个地添加太慢了 然后就想批量添加进去 但总是编译不过 真是orz 像上图这样 批
  • php微信token存储,php获取微信公众帐号access_token存储并长期使用

    header Content type text html charset utf 8 apitest new GetWeixinToken apitest gt cacheData weixin access token 获取微信公众号的
  • CSDN接入AIGC辅助创作,对此你怎么看?

    catalogue 写在前面 GitChat 百万粉丝计划 CSDN接入AIGC 写在最后 写在前面 哈喽 大家好 我是几何心凉 这是一份全新的专栏 得到CSDN王总的授权 来对于我们每周四的绿萝时间 直达CSDN 直播内容进行总结概括 让
  • emacs 选中对齐快捷键

    Alt H 选中段落 Ctrl Alt 对齐
  • Go并发编程

    目录 一些基本概念 并发任务单元的状态 并发任务单元 进程 线程 协程 同步 异步 并发和并行 并发编程 创建并发任务 WaitGroup 等待goroutine结束 WaitGroup Wait WaitGroup Add 获取CPU数量
  • Windows系统下zookeeper启动报错JAVA_HOME is incorrectly set

    最近在Windows系统下 下载了zookeeper 3 5 2 alpha这个版本的zookeeper 把配置文件zoo example cfg重命名为zoo cfg后 直接双击zkServer cmd文件启动结果命令行窗口闪一下就消失了
  • ssh:could not resolve hostname XXX:Temporary failure in name resolution

    ssh could not resolve hostname XXX Temporary failure in name resolution 这个有两种解决办法 1 在 etc profile 中添加如下信息 export HADOOP
  • SDN应用场景实践--指定业务带宽保障

    SDN应用场景实践 指定业务带宽保障 温州大学 12网络工程 欢迎转载 转载请注明出处 谢谢 目录 第一章 背景介绍 2 1 1实验背景
  • 10 linux系统中的日志管理

    10 linux系统中的日志管理 1 journald 服务名称 systemd journald service journalctl 默认日志存放路径 run log journalctl命令的用法 journalctl n 3 日志的
  • python快速实现简易双重弹力球小游戏

    完整代码如下 from tkinter import import random import time Creating the window window Tk window title Bounce window geometry 6
  • STM32HAL 移植MultiButton小巧简单事件驱动型按键驱动框架(裸机版本)

    目录 概述 一 使用方法 特性 按键事件 Examples 二 STM32CubeMx配置 三 Examples 四 运行结果 五 总结 概述 本篇文章介绍如何使用STM32移植 MultiButton开源框架 引用官网简述如下 Multi
  • 日志审计-syslog日志外发

    一 Linux 主机日志 不同的 Linux 版本 syslog 服务名可能为 syslog 也可能为 rsyslog 以下以 syslog 为例说明 Linux 主机所有的日志文件一般都在 var log 下 默认只是不记录 FTP 的
  • antdpro5.2.0项目开卷

    一 下载antdpro antdpro官网 刚开始想的是去github上下载项目 发现下载出来的版本是6 0 0版本 安装完依赖启动项目 左侧的菜单不出来 用react developer tools工具看 是因为左侧的菜单没有渲染出来 身
  • R语言第十一讲 决策树与随机森林

    概念 决策树主要有树的回归和分类方法 这些方法主要根据分层和分割 的方式将预测变量空间划分为一系列简单区域 对某个给定待预测的观 测值 用它所属区域中训练集的平均值或众数对其进行预测 基于树的方法简便且易于解释 但预测准确性通常较低 如图所
  • Mybatis之choose (when, otherwise)标签

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