1 MyBatis动态SQL之if 语句

2 MyBatis动态sql之where标签|转

3 MyBatis动态SQL之set标签|转

4 MyBatis动态SQL之trim元素|转

5 MyBatis动态sql中foreach标签的使用

6 MyBatis动态SQL之choose(when、otherwise)语句

7 MyBatis动态SQL之bind标签|转

  有时候,我们不想用所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis提供了choose元素,它有点像Java中的switch语句。还是上面的例子,但是策略变为:传入了 id就按id查找,传入了loginname 和password就按loginnam 和password查找,若两者都没有提供,就返回所有sex等于男的Employee。

<select id="selectEmployeeChoose" parameterType="hashmap" resultType="my.mybatis.domain.Employee">
SELECT * FROM tb employee WHERE state = 'ACTIVE'
<!--- 如果传入了id,就根据id查询,没有传入id就根据loginname和password查询,否则查询sex等于男的数据-->
<choose>
<when test="id != null">
and id= #{id}
</when>
<when test="loginname != null and password != null">
loginname = #{loginname} and password = #{password}
and
</when>
<otherwise>
and sex = '男'
</otherwise>
</choose>
</select>

  提供id、loginname 和password的时候,调用selectEmployeeChoose()方法,控制台显示如下:

SELECT * FROM tb_employee WHERE state = 'ACTIVE' and loginname = ? and password = ?

  由于传递的参数只包括loginname和password,所以sql语句是按照loginname和password查找,查询返回的Emplyee对象就是loginname,即jack,并且password是123456的对象。没有传递任何参数时,控制台显示如下:

SELECT * FROM tb_employee WHERE state = 'ACTIVE' and sex = '男'

  可以看到,由于没有传递任何参数,故sql语句执行的是< otherwise >元素里面的查询条"sex='男'"的对象。

6 MyBatis动态SQL之choose(when、otherwise)语句的更多相关文章

  1. MyBatis从入门到精通(七):MyBatis动态Sql之choose,where,set标签的用法

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用choose, ...

  2. MyBatis动态SQL之一使用 if 标签和 choose标签

    bootstrap react https://segmentfault.com/a/1190000010383464 xml 中 < 转义 to thi tha <if test=&qu ...

  3. MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】

    (第4章):MyBatis动态SQL[if.choose 和 where.set.trim] MyBatis 的强大特性之一便是它的动态 SQL.MyBatis 3.4.6版本采用了功能强大的OGNL ...

  4. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  5. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法   动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...

  6. 超全MyBatis动态SQL详解!( 看完SQL爽多了)

    MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...

  7. Mybatis动态SQL简单了解 Mybatis简介(四)

    动态SQL概况 MyBatis 的强大特性之一便是它的动态 SQL 在Java开发中经常遇到条件判断,比如: if(x>0){ //执行一些逻辑........ }   Mybatis应用中,S ...

  8. mybatis原理分析学习记录,mybatis动态sql学习记录

    以下个人学习笔记,仅供参考,欢迎指正. MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转 ...

  9. mybatis 动态sql和参数

    mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...

  10. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPD ...

随机推荐

  1. MyCat分库分表-主从

    一.MySQL数据同步 1.主节点配置,log-bin,指定文件名称 2.主节点配置server-id,默认为1 vim /etc/my.cof 在[mysqld]下添加如下配置 log-bin=im ...

  2. Qt通过setProperty来达到设置控件的不同样式表

    文章目录 前言 根据不同的属性显示不一样的样式 setProperty Q_PROPERTY和DynamicProperty 前言 最近在做项目的时候,找了一个开源的小控件,发现里面有一个设置样式的骚 ...

  3. git push解决 error src refspec master does not match anyerror

    前言 git push origin master git push 时报错: error: src refspec master does not match anyerror: failed to ...

  4. Kubernetes:根据进程 Pid 获取 Pod 名称

    前言 在管理 Kubernetes 集群的过程中,我们经常会遇到这样一种情况:在某台节点上发现某个进程资源占用量很高,却又不知道是哪个容器里的进程.有没有办法可以根据进程 PID 快速找到 Pod 名 ...

  5. oracle忘记sys,system密码的解决方法

    1. 找到oracle的安装目录: 找到此路径(D:\app\Administrator\product\11.2.0\dbhome_1\BIN),通过sqlplus.exe执行操作命令.(如果提示s ...

  6. 官方的 MCP C# SDK:csharp-sdk

    csharp-sdk 这是 Model Context Protocol(MCP)官方提供的 C# SDK,为 MCP 服务器和客户端提供简单易用的接口, 主要由微软维护.MCP 是由 Claude( ...

  7. 【SpringCloud】各种组件的更新情况

    关于Cloud各种组件的停更/升级/替换 由停更引发的"升级惨案" 停更不停用 被动修复bugs 不再接受合并请求 不再发布新版本 以前 now2020 服务注册中心 Eureka ...

  8. kubernetes学习之CKA认证

    最近接触了很多kubernetes应用场景,学习了不少kubernetes的知识,所以想着官方认证一下CKA.不得不感叹:云时代真的来了. K8s的专业技术认证主要有以下几种: CKA(Kuberne ...

  9. shader中的if语句优化

    可以借用lerp和step来拼接模仿语句 lerp(a,b,step(value,c))

  10. 康谋分享 | 从CAN到CAN FD:ADTF在汽车网络中的应用

    随着汽车电子技术的发展,车辆上配备了越来越多的电子装置,这些设备多采用点对点的方式通信,这也导致了车内存在庞大的线束.造成汽车制造和安装的困难并进一步降低汽车的配置空间,汽车总线逐步开始向网络化方向发 ...