十、Mybatis的choose (when, otherwise)标签使用

2023-10-27

choose标签的作用:

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

假设有一个user表,里面有username和sex字段,那么查询user的时候我可以按username来查找,也可以按sex来查找,对应的sql可以这样写:

select * from user where username = 'xx'

或者

select * from user where sex= 'xx'

也就是说对于多个条件只要有一个条件满足即可,这种情况只能使用choose 标签了;用if标签的话是实现不了的,因为if标签只要条件满足就会执行,但是我们并不想应用所有的条件,而只是想从多个选项中选择一个,choose标签就可以解决这个问题。

对应的mapper文件可以这样写:

<select id="findUserByNameOrSex" parameterType="blog.csdn.net.mchenys.pojo.User"
		resultType="blog.csdn.net.mchenys.pojo.User">
		
	select * from user 
	<where>
		<choose>
			<when test="username !=null and username !=''">
				 username = #{username}
			</when>
			<when test="sex !=null and sex !=''">
				 sex = #{sex}
			</when>
			<otherwise></otherwise>
		</choose>
	</where>	
</select>

假设测试方法是这样的

@Test
public void testFindUserByNameOrSex() {
	UserMapper userMapper = (UserMapper)applicatonContext.getBean("userMapper");
	User user = new User();
	user.setUsername("老陈");
	user.setSex("1");
	List<User> list = userMapper.findUserByNameOrSex(user);
	System.out.println(list);
}

执行后,查看控制台的sql语句,你会发现只输出了一个条件
在这里插入图片描述
虽然代码中是同时设置了username和sex这2个条件,但是由于when 标签先判断的是username,刚好也满足条件,所以就只按username来查询了。

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

十、Mybatis的choose (when, otherwise)标签使用 的相关文章

  • 国际版阿里云/腾讯云免费:阿里云产品-弹性核算简介(依据官网转载)

    阿里云产品 弹性核算简介 依据官网转载 云服务器ECS Elastic Compute Service 是阿里云供给的功能杰出 安稳牢靠 弹性扩展的IaaS Infrastructure as a Service 等级云核算服务 实例 等同
  • Java复习-16-多态性

    多态性 在Java中对于多态性有两种实现的模式 方法的多态性 方法的重载 同一个方法名称可以根据传入的参数类型和个数的不同 进行不同的处理 方法的覆写 同一个方法可能根据使用子类的不同 由不同的实现 对象的多态性 父子实例之间的转换处理 有

随机推荐

  • 机器学习类比赛中经常用到的一些函数和知识点

    文章目录 豆瓣 清华源命令 pip升级命令 画图plot汉字显示不出 python控制台打印结果省略的问题 enumerate pandas描述数据基本分布情况 isin 判断值是否存在 某两个特征之间的关联性 np corrcoef fo
  • GLib学习

    Gstreamer 基础 学习博客 一 glib glib介绍 1 1 类型介绍 glib的类型定义在gtypes h文件中 关键定义如下 1 1 1 不规则类型 gboolean gpointer gconstpointer gchar
  • 品味树莓派:GPIO Zero库进阶使用

    文章目录 目的 进阶功能 Source Values模式 Device Source Tools 高级设备类库 异常 Internal Devices Pin Factory 总结 目的 GPIO Zero库在传统的GPIO使用基础上还提供
  • 性能测试简介

    性能测试是通过自动化的测试工具模拟多种正常 峰值以及异常负载条件来对系统的各项性能指标进行测试 负载测试和压力测试都属于性能测试 两者可以结合进行 通过负载测试 确定在各种工作负载下系统的性能 第三方测试目标是测试当负载逐渐增加时 系统各项
  • Dubbo笔记 ⑳ :消费者的异步调用

    文章目录 一 前言 1 流程概述 二 关键类 1 DefaultFuture 1 1 DefaultFuture 的构造 1 2 DefaultFuture newFuture 1 3 DefaultFuture received 1 4
  • Windows上利用Zerotier配置moon无法连接

    问题描述 按照相关教程 1 2 配置好moon之后 需要在各客户端zerotier上配置 并连接此服务器 在Windows电脑中 用两种方法将机器连接上 moon 节点 方法一 在打开服务程序services msc 找到服务 ZeroTi
  • 内嵌Python import时undefined symbol错误及解决

    内嵌Python import时undefined symbol错误及解决 以下代码 include lt Python h gt include lt stdio h gt include lt stdlib h gt int main
  • 动态分区分配算法(First Fit,Next Fit,Best Fit,Worst Fit)

    一 动态分区分配算法的背景 为了能将用户程序装入内存 必须为它分配一定大小的内存空间 连续分配方式是最早出现的一种存储器分配方式 曾被广泛应用于上世纪60 80 年代的OS中 该分配万式为个用户程序分配 一个连续的内存空间 即程序中代码或数
  • 十大相似图片搜索网站(以图搜图)

    十大相似图片搜索网站 以图搜图 2011 04 13 21 07 56 分类 默认分类 标签 以图搜图 图片搜索 搜图 百度搜图 搜索引擎 举报 字号 订阅 下载LOFTER客户端 如何凭着一张现有图片找出它的原始图片 或者是凭着一张小的缩
  • ROS-Noetic版本的安装(Ubuntu20.04环境)

    ROS安装 关于ROS的安装已经有很多好的博文供以参考 本文总结了一些安装过程中可能出现的报错情况已经解决方法 许多博文的教程步骤大差不差 建议是直接先按照官方步骤走 遇到问题再一步步解决 ROS官方的参考链接 http wiki ros
  • python中mgrid和meshgrid的不同

    在生成插值数据时 有时会用到 mgrid 和 meshgrid 两个函数 关于插值函数的应用参见 https blog csdn net gsgbgxp article details 116145501 t7 关于两者的差别可参见 htt
  • 李宏毅 机器学习 2016 秋:2、Regression

    二 Regression Case Study 我们今天要讲的是 Regression 等一下我会举一个例子 来讲 Regression 是怎么做的 顺便引出一些 machine learning 里面 常见的重要观念 那 regressi
  • DNS服务器

    DNS服务简介 DNS Domain Nmae Server 域名服务系统 对域名进行解析 1 域名空间 根域 代表域名命名空间的根 顶级域 直接处于根域下面 以国家或地区命名 二级域 在顶级域下面 子域 主机 FQDN完全合格的域名 如w
  • Mybatis-plus查询条件拒绝自动去重

    问题描述 当进行多表数据关联时候 使用mybatis结果集封装数据 mybatis会将主键id作为map的key值 如果后面有重复的主键id 那么将会覆盖之前的数据 很显然这不是多表关联查询数据想要看到的结果 如此以来 最终结果会比实际结果
  • 浏览器的选择建议,按照这些建议选,总能找到合适的

    浏览器可以说是电脑的标配了 几乎每台电脑都安装有浏览器 最近 很多朋友询问哪些浏览器比较好用啊 今天给大家分享一下浏览器的选择建议 让大家都能选到适合自己的浏览器 同时 系统全面的介绍各家浏览器的特点 哪些值得我们花时间试用 浏览器的选择建
  • 如何在C语言中将文字显示为花里胡哨的多种颜色

    Hello大家好 最近刚刚做完C语言的课程设计 在评分标准中有一项是展示界面美观整洁 学前端的我对花里胡哨的界面情有独钟 这里为大家简单介绍三种改变字体颜色的方法 注意 本文中所有演示截图均来自VS 2022 目录 改变C语言显示界面字体颜
  • Base64转二进制文件流以及转File、图片转Base64、二进制流转Base64

    1 Base64转二进制文件流 方法一 Base64字符串转二进制流 param String dataurl Base64字符串 字符串包含Data URI scheme 例如 data image png base64 function
  • 智能硬件开发如何选择低功耗MCU?

    本文转载至 http www iot online com IC embedded 2015 090928393 html 本文将市场上典型的低功耗MCU系列进行了比较 分析得出基于ARM Cortex M0 内核的MCU系列最适合穿戴式医
  • 【GAOPS006】CRC8串行计算原理和verilog实现

    1 定义 X P N R X 被除数 P 除数 p 1 表示p bit位宽 N 商 不关心 R 余数 CRC值 2 规则 很简单就一个 1 补零 CRC8 算出来的校验和有8bit CRC16算出来的校验和有16bit 在需要计算的数据X被
  • 十、Mybatis的choose (when, otherwise)标签使用

    choose标签的作用 按顺序判断其内部when标签中的test条件出否成立 如果有一个成立 则 choose 结束 当 choose 中所有 when 的条件都不满则时 则执行 otherwise 中的sql 类似于Java 的 swit