MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。
动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

if

mapper中编写sql,使用<if test = ' '> </if>,可以使你的接口很便捷

举个栗子:

select * from student
<if test = " id != null ">where student.id =#{id}
</if>

一个<if>标签还是不够用的,你单独使用<if>的时候肯定还会遇到这样的问题

select * from student
where
<if test = " id != null ">
student.id = #{id}
</if>
<if test = " name != null and name != '' ">
and student.name = #{name}
</if>

如果当你的id为空时,name前面的and是没有必要的,运行会抛异常
或者当这两个<if>都为空时,只剩一个空的where,还是会报错

where

select * from student
<where>
<if test = " id != null ">and student.id = #{id}
</if>
<if test = " name != null and name != '' ">and student.name = #{name}
</if>
</where>
  • where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入WHERE子句。而且,若语句的开头为ANDORwhere 元素也会将它们去除。

if-else =>> choose, when, otherwise

首先,在myBatis中是不支持if-else的,想要是用if-else的话,可以使用choose代替。
choose,when,otherwise有点像Java中的switch

栗子:


<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<choose><when test="title != null">AND title like #{title}</when><when test="author != null and author.name != null">AND author_name like #{author.name}</when><otherwise>AND featured = 1</otherwise></choose></select>

关于mybatis的动态sql,建议查看,中文哦官方文档

转载于:https://www.cnblogs.com/lanaiwanqi/p/10445647.html

myBatis xml if、where、if-else?、foreach 心得相关推荐

  1. mybatis.xml中sql编写规范

    一.越少的代码,越强悍的功能,xml里面应该6个sql语句就够用了,修改,维护成本很低,见下表 下载 英文名 方法名称 核心点 建议 insert 1.新增数据 如果是自增主键,应该返回主键ID de ...

  2. spring boot 转xml格式报错解决方法_芋道 Spring Boot MyBatis 入门(一)之 MyBatis + XML...

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MyBatis/「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MyBatis + XML 2.1 引入 ...

  3. mybatis XML 中<if>、<choose>、<when>、<otherwise>等标签的使用?多条件查询该怎么处理?

    mybatis XML 中if.choose.when.otherwise等标签的使用 一般使用在多条查询,虽然也可以通过注解写,我比较菜,我不会. 一般多条查询怎么解决? 1.如果是单表间的多条件查 ...

  4. Mybatis Xml Sqlsession PageHelper

    Mapper xml 1.存Date类型的 数据插入#{item.createTime, jdbcType=TIMESTAMP} //数据库会存带 时间的信息#{item.createTime, jd ...

  5. MyBatis-06 MyBatis XML方式之多个接口参数用法

    概述 模拟场景:根据用户ID和角色的enable状态来查询用户的所有角色 工程结构 多个基本类型参数的场景 1.UserRoleMapper接口增加接口方法 2.UserRoleMapper.xml配 ...

  6. MyBatis-04 MyBatis XML方式之insert元素

    insert概述 简单的insert用法 1. UserMapper中添加接口方法 2. UserMapper.xml 添加节点 3. 编写单元测试 使用JDCB方式返回主键自增的值 1.UserMa ...

  7. MyBatis-03 MyBatis XML方式之select元素

    概述 select用法 根据用户id查询用户信息 1.UserMapper接口中添加接口方法 2. UserMapper.xml中配置resultMap和select元素 查询全部的SysUser 添 ...

  8. MyBatis-02 MyBatis XML方式概述及配置步骤

    概述 一个简单的权限控制需求 创建数据库表 创建实体类 XML方式概述及步骤 1. 首先在src/main/resources下com.artisan.mybatis.xml.mapper目录下创建5 ...

  9. mybatis.xml文件

    mybatis.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura ...

  10. MyBatis框架 mybatis.xml与Mapper.xml基本架构

    mybatis.xml 该文件一般位于src同级目录下,便于加载 DTD <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Conf ...

最新文章

  1. groupby+(apply+agg+transform)方法的比较
  2. antd 动态添加表单_ZooTeam 拍了拍你,来看看如何设计动态化表单
  3. 【转】eclipse android 设置及修改生成apk的签名文件 -- custom debug keystore
  4. linux操作系统原理_Linux内核分析-操作系统是如何工作的(二)
  5. Android使用adb命令安装应用-连接usb
  6. MySQL吉连_Learn Jdbc : Java, Jdbc, Odbc
  7. linux 中国-新手村,从新手村开始,手把手带你入门梳理内核代码
  8. flask-mail异步发送邮件_异步、定时、邮件任务
  9. 各个阶段的前端得会哪些“特殊”技能?
  10. c#学习笔记01——引用类
  11. Servlet获取全路径
  12. 设计师配色宝典!教你从零开始学配色(一)
  13. 原生AJAX GET请求
  14. 如何安装SQL server 2000 SP4补丁
  15. 计算机硬盘密码,电脑常识之--如何给移动硬盘[硬盘]加密码
  16. 写bat文件,报系统找不到指定文件的处理方式
  17. 微软反linux广告图片,一张地铁站“前程无忧广告”的图片引发网友热议 官方:虚假图片...
  18. 异常:0xC0000005: 读取位置 0x00617568 时发生访问冲突。
  19. 非乘a非b_给你28万 ,你买B+级车还是豪华入门车?
  20. 【openVINO+paddle】CPU部署新冠肺炎CT图像分类识别与病害分割

热门文章

  1. 重庆大学计算机组成,重庆大学计算机组成原理试题集(含部分答案)
  2. c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)
  3. GPU Gems1 - 8 衍射的模拟
  4. 《神经网络:回到未来》(Neural Nets Back to the Future)-ICML 2016
  5. Vue语法学习第三课——计算属性
  6. NO.8:自学python之路------并行socket网络编程
  7. Hadoop学习笔记—8.Combiner与自定义Combiner
  8. IScroll5中文API整理,用法与参考
  9. PHP PDO函数库详解
  10. 酒鬼随机漫步(一个矢量类)