myBatis xml if、where、if-else?、foreach 心得
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子句。而且,若语句的开头为AND或OR,where元素也会将它们去除。
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,建议查看,中文哦官方文档
myBatis xml if、where、if-else?、foreach 心得的更多相关文章
- Java-MyBatis:MyBatis XML 文件
		
ylbtech-Java-MyBatis:MyBatis XML 文件 1.返回顶部 1. Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大, ...
 - Mybatis xml mapper 特殊写法总结
		
项目告一段落,业务代码也写得差不多了,框架仍然用的是 ssm ,为了省去单表数据库操作的代码编写,继续用 mybatis generator 生成单表对应的实体类.dao层映射关联及配置文件,私下还尝 ...
 - mybatis xml配置文件要点说明
		
mapper映射方式: 1 一一具体列举的方式 2扫描package 如: <mappers> <!-- 告知映射文件方式1,一个一个的配置 <mapper resource= ...
 - 如果拷贝项目出现各种找不到文件的时候,基本就是没有标记,或者文件名的问题,Could not find resource mybatis.xml,解决方法
		
Could not find resource mybatis.xml
 - mybatis xml配置文件模版
		
mybatis xml配置文件模版 1.mybatis核心配置文件书写(SqlMapConfig.xml) <?xml version="1.0" encoding=&quo ...
 - mybatis.xml和mapper.xml的配置
		
mybatis.xml和mapper.xml的配置 1.创建一个Source Folder 2.完成分包mapper和mybatis 3.创建mybatis.xml文档 4xml文档名 5.名字规范 ...
 - spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid
		
SpringBoot+MyBatis(xml)+Druid 前言 springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成. 主要是 ...
 - 聊聊、Mybatis XML
		
引入相应的依赖包 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-sprin ...
 - MyBatis从入门到精通(2):MyBatis XML方式的基本用法
		
本章将通过完成权限管理的常见业务来学习 MyBatis XML方式的基本用法 2.1一个简单的权限控制需求 权限管理的需求: 一个用户拥有若干角色,一个角色拥有若干权限,权限就是对某个模块资源的某种操 ...
 - (二十一)SpringBoot之集成mybatis:使用mybatis xml
		
一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
 
随机推荐
- BZOJ-1721|线性dp-缆车支柱
			
Ski Lift 缆车支柱 Description Farmer Ron in Colorado is building a ski resort for his cows (though budge ...
 - FJNU Fang G and his Friends(状压DP)题解
			
Description 众所周知,fang G 有很多小伙伴,有一天,Fang G 打算带他们去玩有趣的游戏OOXX,这个游戏需要分成两组,有趣的是,每个人互相之间都有一个满意度,大家都想和自 ...
 - 极其简单的VSCode C++环境配置
			
下载我打包的文件VSCode-cpp.7z.001 和 VSCode-cpp.7z.002,解压. 在系统环境变量中添加:你解压的路径\Project\.vscode\MinGW\bin. 打开你解压 ...
 - 剑指offer:链表中倒数第k个结点
			
问题描述 输入一个链表,输出该链表中倒数第k个结点. 解题思路 两个指针都指向头结点,第一个指针先移动k-1个结点,之后两指针同时移动,当第一个指针到链表尾的时候,第二个指针刚好指向倒数第k个结点. ...
 - L1范数与L2范数
			
L1范数与L2范数  L1范数与L2范数在机器学习中,是常用的两个正则项,都可以防止过拟合的现象.L1范数的正则项优化参数具有稀疏特性,可用于特征选择:L2范数正则项优化的参数较小,具有较好的抗干 ...
 - Activiti 工作流之所学所感(基本配置) DAY1
			
由于公司需求,最近在研究工作流,在此记录一下所学所感以备往后使用时候可以方便查询,有不足之处请各位大牛提点,下面直接进入主题. 下载activiti 所需资料 可以直接在官网上下载,也可以在我的网盘 ...
 - 搜索引擎选择: Elasticsearch与Solr(转)
			
搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分 ...
 - 压测过程中使用nmon对服务器资源的监控
			
1.nmon工具的下载和安装: 官网:http://nmon.sourceforge.net/pmwiki.php 下载完成后进行解压,更改权限:chmod 777 2.查看linux系统的版本,再使 ...
 - 函数嵌套定义,闭包及闭包的应用场景,装饰器,global.nonlocal关键字
			
函数的嵌套定义 在一个函数的内部定义另一个函数 为什么要有函数的嵌套定义: 1)函数fn2想直接使用fn1函数的局部变量,可以将fn2直接定义到fn1的内部,这样fn2就可以直接访问fn1的变凉了 2 ...
 - CPU利用率和CPU负荷(CPU usage vs CPU load)
			
对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷. 其中%Cpu相关的内容: us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗 ...