首先最重要的一点是when与otherwise标签一定是在choose内部使用的

其次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="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User">  SELECT *  FROM User u   <where>  <choose>  <when test="username !=null ">  u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')  </when >  <when test="sex != null and sex != '' ">  AND u.sex = #{sex, jdbcType=INTEGER}  </when >  <when test="birthday != null ">  AND u.birthday = #{birthday, jdbcType=DATE}  </when >  <otherwise>  </otherwise>  </choose>  </where>
</select> 

if 标签不会跳出判断语句,下面有一个容易忘记的点顺便提一下

使用if标签中的==判断字符串的时候应该写成

<if test='type=="y"'>  and status = 0
</if>  

而不是

<if test="type=='y'">  and status = 0
</if>  

mybatis是使用的OGNL表达式来进行解析的,在OGNL的表达式中,’y’会被解析成字符,因为java是强类型的,char 和 一个string 会导致不等。所以if标签中的sql不会被解析。具体的请参照 OGNL 表达式的语法

mybatis的 <choose><when><otherwise>标签和<if>标签的区别相关推荐

  1. Mybatis——mapper.xml中常用的SQL相关标签简介

    题外话:使用Map方式用于传参,也是一种比较方便的方法 Map<String,Object> params = new HashMap<>(); params.put(&quo ...

  2. MyBatis—insert语句返回主键和selectKey标签

    本文已同步至个人博客liaosi's blog - MyBatis-insert语句返回主键和selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作.如果在插入 ...

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

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

  4. Mybatis if标签和where标签结合巧妙使用

    本文章描述的是 Mybatis if标签和where标签的结合使用 [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 免费开源 关注 你不会迷路 [x3]系列文章 ...

  5. javaweb带父标签的自定义标签

    1.完整的示例代码:要实现的功能是父标签中有name属性,子标签将父标签的name属性值打印到jsp页面上. 1.1 父类和子类的标签处理器类 testParentTag.java package c ...

  6. JSTL标签之核心标签

    JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断.数据管理格式化.XML 操作以及数 ...

  7. 06-typeAliases标签和package标签

    目录 一.typeAliases 1.连接数据库配置文件 2.映射文件 二.package 一.typeAliases 在 连接数据库的xml 文件中配置typeAliases,这样映射文件的xml的 ...

  8. 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

    学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签.  jsp标签的分 ...

  9. JSP→JSTL标准标签库简介与环境搭建、JSTL助手EL表达式EL隐式对象、标签→out、set、if、多选择配合、foreach、redirect、格式化、JSTL函数标签、自定义标签、标签类架构

    JSTL标准标签库简介与环境搭建 EL表达式与EL隐式对象 out标签 set标签 remove标签 catch标签 if标签 choose.when.otherwise配合标签 foreach标签 ...

  10. java jstl标签库_JSTL标签库

    1.什么是JSTL? JSTL全称为 JSP Standard Tag Library 即JSP标准标签库.它与EL表达式一样,也是为了替换掉JSP中的java代码.它提供了一系列的JSP标签,实现了 ...

最新文章

  1. Anchor的泛化:统一物体检测、实例分割、姿态估计的Point-set Anchor
  2. 您是否应该始终偏爱xrange()而不是range()?
  3. 编程学习记录12:Oracle数据库的一些基本操作2,表相关操作,添加约束
  4. [转载] 什么是istio 官网内容
  5. 牛客网--19校招--俄罗斯方块
  6. MySQL数据库服务器搭建及基本管理
  7. webview 禁用横竖屏切换_X5内核WebView横屏切换崩溃
  8. JS 中的call,apply,bind 和 caller, callee
  9. 惠普服务器硬件检测软件吗,惠普 PROLIANT 服务器硬件检测工具使用方法
  10. 解决win10删除文件时找不到该项目的问题
  11. 简述三级管开关的导通条件
  12. Ubuntu20.04 安装搜狗拼音
  13. 2022凉茶市场份额
  14. 二手不是垃圾,回收再生才是主流——GRS
  15. autohotkey_如何编写一个AutoHotkey脚本
  16. php获取QQ音乐直链,微信小程序-获取QQ音乐直链
  17. 实践!在Spring-Boot启动时添加方法运行,查漏补缺
  18. git push问题:kex_exchange_identification: read: Connection reset by peer
  19. 成为数据科学家的第一个project
  20. Acrel-5010重点用能单位能耗在线监测系统在湖南三立集团的应用

热门文章

  1. 网络编程------IP地址,端口号,套接字,网络字节序
  2. 解决桌面文件图标变黑方法
  3. 【误判心理 学1.0】奖励和惩罚 超级反应倾向
  4. 计算机安装xp蓝屏怎么办,当我在笔记本电脑上安装XP时,出现蓝屏. 我该怎么解决?...
  5. Google Play 政策更新提醒与重点解读 | 2021 年第四季度
  6. css scroll 上手试验 (width/scrollHeight等)
  7. 深度学习中的Momentum算法原理
  8. 安装麦咖啡8.7出现--错误1920
  9. GLAPI/glTexStorage2D
  10. 大厂门槛高?阿里内部5份专属PDF带你激流勇进,勇夺offer