【MyBatis】进一步理解choose、when、otherwise标签

news2025/1/12 1:02:11

choose、when、otherwise

choose里面包含when、otherwise两个标签,choose是父标签,when和otherwise必须都要写在它里面

当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出

当所有的条件都不满足的时候就输出 otherwise 中的内容。第一个when不满足则继续往下判断,直到满足为止,如果全不满足,则执行otherwise(相当于else)

when

  • 相当于else if,至少有一个
  • 当 when 中的条件满足的时候就输出其中的内容
  • 和java 中的 switch 中的case效果差不多,但是和case还是有差别的(这里是直到寻找到满足条件的值为止or全不满足)
  • 当第一个条件满足时,下面的都会执行

otherwise

when元素表示当 when 中的条件满足的时候就输出其中的内容,

  • 相当于else,最多有一个
  • 当所有的我很条件都不满足的时候就输出 otherwise 中的内容(可以不写)

  • 不需要加and,第一个条件满足下面都不用判断了

  • 这里员工姓名成立的话,其它下面所有条件都不再判断了

用代码带你进一步理解

表结构:

映射文件:

主要看这里面的choose中的语句 

我把empName放在了choose开头

<!--List<Emp> getEmpByChoose(Emp emp);-->
<select id="getEmpByChoose" resultType="Emp">
    select *from t_emp
    <where>
        <choose>
            <when test="empName!= '' and empName!= null">
                emp_name=#{empName}
            </when>
            <when test="age != '' and age != null">
                age = #{age}
            </when>
            <when test="gender != '' and gender != null">
                gender = #{gender}
            </when>
        </choose>
    </where>
</select>

测试类

这里把张三放到了前面,我们可以看到数据库表中是有张三这条数据的,所以第一个when满足,直接就输出结果(下面的不再判断)

@Test
public void testGetEmpByChoose(){
    SqlSession sqlSession= SqlSessionUtil.getSqlSession();
    DynamicSQLMapper mapper=sqlSession.getMapper(DynamicSQLMapper.class);
    Emp emp=new Emp(null,"张三",20,"男");
    List<Emp> list=mapper.getEmpByChoose(emp);
    list.forEach(System.out::println);
}

结果如下:

DEBUG 12-27 22:35:57,043==> Parameters: 张三(String) (BaseJdbcLogger.java:137) 
DEBUG 12-27 22:35:57,057<==      Total: 1 (BaseJdbcLogger.java:137) 
Emp{empId=1, empName='张三', age=20, gender='男'}

这里我把性别gender改为不男不女,效果还是一样,足以证明我们的后面语句没有判断

把empName改为" ",gender和上面一样不符合要求,但是age 满足要求,一样可以查询到相应信息

当全部内容都不满足条件时,必然emp不会输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

半导体设备中制冷系统的压力和温度准确控制解决方案

摘要&#xff1a;针对半导体低温工艺中制冷系统在高压防护和温度控制中存在的问题&#xff0c;本文将提出一种更简便有效的解决方案。解决方案的核心是在晶片托盘上并联一个流量可调旁路&#xff0c;使制冷剂在流入晶片托盘之前进行部分短路。即通过旁路流量的变化调节流出晶片…

罗切斯特大学将研究未来执行军事任务的量子计算

罗切斯特大学的专家将开发受量子启发的求解器系统&#xff0c;以解决军事任务中的实际问题。 美国军事研究人员需要使用量子启发求解器系统的量子计算技术&#xff0c;将高性能计算性能提高至少两个数量级的新方法。于是&#xff0c;他们从纽约的罗切斯特大学找到了解决方案。美…

Akka 进阶(三)Route 路由

目录一 路由Actor二 Pool方式的方式创建路由三 Group方式创建路由消息可以通过多种方式送达目的地&#xff0c;比如tell、ask、forward等&#xff0c;这些方式是最常规也是最简单的&#xff0c;但是对于复杂的消息投递逻辑&#xff0c;比如轮询投递、随机投递、广播组等&#x…

IB课程预估分,请认真规划学习进程

近年受疫情影响&#xff0c;IB考试形式与分数情况&#xff0c;有不小的波动&#xff0c;年度出分依然吸引着众人目光。尤其明后年准备参加大考的同学&#xff0c;更关心实战难度和考试分数的变化趋势。 01预估分&#xff1a;严重被压低的预期分数 全球疫大环境下&#xff0c;IB…

合宙 ESP32C3 烧录 Micropython 后连接端口报错

合宙esp32c3 开发板烧录micropython 后连接VScode 或 Thonny报错&#xff1a; Device is busy or does not respond. 1. 原因&#xff1a; 烧录的micropython bin文件有问题。 问题参考&#xff1a; 链接: 合宙ESP32-C3 烧录Micropython报错入坑记 2. 解决办法&#xff1a…

H3C smart-link实验 C套拆解

H3C smart-link实验 C套拆解一、项目拓扑二、项目需求三、配置步骤1.vlan-trunk2.STP3.smart-link四、测试一、项目拓扑 二、项目需求 总部局域网内sw3进行双上行链路灵活备份&#xff0c;smart-link组1 引用实例1(绑定vlan10)的流量从经过sw1的链路通向出口路由器r1&#xff…

10个优秀的Python库,实用且有趣

序言 哈喽兄弟们&#xff0c;今天分享10个优秀的Python库&#xff0c;超级实用&#xff01; 为什么这么多人选择学习python?首先&#xff0c;python是一门全场景编程语言&#xff0c;对于初学编程的人而言&#xff0c;选择一门全场景编程语言是非常不错的选择;其次&#xff…

PHP aws-sdk-php文件存储的实现与应用

前言 最近项目需要用到对象存储&#xff0c;将所有上传文件&#xff0c;存储到BOS云存储上。在开发过程中&#xff0c;遇到一些小小的问题&#xff0c;做个简单记录。 功能实现 1 下载sdk&#xff08;以下两种方式&#xff0c;任选其一即可&#xff09; &#xff08;1&#…

手绘图说电子元器件-电阻,电容,电感

电阻器与电位器 电阻器是最基本的电子元件,电位器是最基本的可调电子元件,它们广泛应用在各种电子电路中。 电阻器 电阻器是限制电流的元件,通常简称为电阻,是一种最基本、最常用的电子元件,包括固定电阻器、可变电阻器、敏感电阻器等。 电阻器的主要参数有电阻值和额…

FFT(2)

DFT到FFT 这是DFT公式 对DFT代数变换 将DFT的计算&#xff0c;分为计数组和偶数组。 惊奇的发现&#xff1a;只需要改变WkNW_k^NWkN​的符号即可得到X&#xff08;k&#xff09;的另一半项数的结果。 得到FFT算法&#xff08;蝶形运算&#xff09; 惊奇的发现&#xff1…

docker安装教程,即学即会

docker教程&#xff1a; https://www.runoob.com/docker/docker-tutorial.html卸载docker 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序&#xff0c;请卸载它们以及相关的依赖项。 yum remove docker docker-client docker-client-latest docker-co…

maven打包缺少依赖异常eu.neilalexander:jnacl:jar:1.0.0 was not found in...解决

在Linux系统的服务器上使用脚本部署项目&#xff0c;脚本的逻辑是&#xff1a; 进入到工作空间的项目文件夹从SVN拉取最新代码命令svn up执行mvn clean执行mvn package进入jar包生成的target文件夹nohub java -jar xxxxx.jar >/dev/null 2>&1 & 在项目打包过程…

C++迭代器详解

思考一个问题&#xff1a;我们该如何遍历一个字符串呢&#xff1f; 方法一&#xff1a;正常遍历 string s1("hello"); for(size_t i 0;i<s1.size();i) {cout<<s1[i]<<" ";//[]是一个重载运算符&#xff0c;实际上调用了s1.operator[](i)…

【爬虫+数据清洗+可视化分析】用Python分析哔哩哔哩“阳了“的评论数据

目录 一、背景介绍 二、爬虫代码 爬虫部分不作讲解。 三、可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间分析-折线图 3.3.3 点赞数分布-直方图 3.3.4 评论内容-情感分布饼图 3.3.5 评论内容-词云图 三、演示视频 一、…

Ansible常用模块

ping模块 验证主机的连通性 [rootmonster1 ~]# ansible all -m ping 192.168.71.131 | SUCCESS > {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong&q…

Java中mongodb指定DB通过aggregate聚合查询操作示例

目录 前言&#xff1a; 应用场景&#xff1a; 命令描述&#xff1a;​ 代码示例&#xff1a; 聚会查询&#xff1a; 数量查询&#xff1a; 前言&#xff1a; 大家都知道&#xff0c;mongodb是一个非关系型数据库&#xff0c;也就是说&#xff0c;mongodb数据库中的每张表…

node-express学习总结

项目搭建 1. 使用express提供的框架构建&#xff08;不需要&#xff09; 2. 从零开始&#xff08;推荐&#xff09;安装 初始化项目 npm init -y安装express npm install express1.express的基本使用 创建js文件 const express require(express) // 1&#xff0c;创建服…

SSL/TLS类安全漏洞及SLB安全漏洞问题

SSL/TLS类安全漏洞及SLB安全漏洞问题1 : 问题背景1.1、SSL/TLS类漏洞-Sweet32 攻击1.2、SSL/TLS类漏洞-弱密码套件2 : 解决思路2.1、学习SSL/TLS是什么2.2、安装检测工具2.3、升级OpenSSL2.4、调整加密算法3 : 总结3.1、比较环境的不同3.2、解决该问题3.3、相关资源1 : 问题背景…

创建进程与进程地址空间

目录 创建进程 进程地址空间 为什么要用虚拟地址呢&#xff1f; 什么是进程地址空间&#xff1f; 为什么要写时拷贝呢&#xff1f; 创建进程 前面提到使用fork可以创建子进程&#xff0c;现在介绍fork创建子进程的细节。 fork创建子进程的时候&#xff0c;子进程的内核数…

如何给公司内网搭建一个专用的DNS服务器?

如何给公司内网搭建一个专用的DNS服务器&#xff1f; 引言 平时做域名解析&#xff0c;一般直接修改的/etc/hosts文件。对于服务器数量小的情况完全可以&#xff0c;但是如果服务器数量较多&#xff0c;每个都修改比较麻烦。 DNS是作为域名解析。在实际的生产过程中&#xff…