Mybatis基于xml的动态sql实现
动态sql可以很方便的拼接sql语句,主要用于复合条件查询;
主要通过这几个标签实现:
if 标签:
<select id="selectStudentByIf" resultType="Student">
select id,name,age,score from student where 1=1
<if test="name != null and name != ''">
and name like '%' #{name} '%'
</if>
<if test="age > 0">
and age < #{age}
</if>
</select>
使用if标签判断参数,可以使用where 1=1,后面跟上if标签,这样可以避免因为‘and’导致sql语句冲突;
where 标签
<select id="selectStudentByWhere" resultType="Student">
select id,name,age,score from student
<where>
<if test="name != null and name != ''">
and name like '%' #{name} '%'
</if>
<if test="age > 0">
and age < #{age}
</if>
</where>
</select>
由于使用where 1=1 对查询性能也有一定的影响;可以使用where嵌套 if 标签,可以不需要使用上面“where 1=1”;
where标签会自动过滤掉if标签里sql语句的第一个and连接词;
作用:用来简化SQL语句中的where条件,可以嵌套其他标签;
choose标签:
<select id="selectStudentByChoose" resultType="Student">
select id,name,age,score from student
<where>
<choose>
<when test="name != null and name != ''">
name like '%' #{name} '%'
</when>
<when test="age > 0">
age < #{age}
</when>
<otherwise>
1 != 1
</otherwise>
</choose>
</where>
</select>
表示:
当查询条件有name时,不管有没有age,都只按name查询;
当查询条件没有name时,才按age进行查询;
当name和age都没有时,查询不到任何数据。
作用:类似于switch语句,选择多个条件中的一个;
foreach标签:
foreach用来遍历,遍历的对象可以是数组,也可以是集合。
属性:
collection可以指定遍历对象的类型:array,list
item是指定的集合中每一个元素迭代时候的别名;
separator表示在每次进行迭代之间以什么符号作为分隔符;
open表示该语句以什么开始,close表示以什么结束;
<select id="selectStudentByForeachArray" resultType="Student">
select id,name,age,score from student
<if test="array != null and array.length > 0">
where id in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</select>
表示遍历一个数组,迭代别名为id;
<select id="selectStudentByForeachList" resultType="Student">
select id,name,age,score from student
<if test="list != null and list.size > 0">
where id in
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</select>
遍历一个list集合;
<select id="selectStudentByForeachList2" resultType="Student">
select id,name,age,score from student
<if test="list != null and list.size > 0">
where id in
<foreach collection="list" item="stu" open="(" close=")" separator=",">
#{stu.id}
</foreach>
</if>
</select>
遍历一个list,list中每个元素为对象;遍历对象的id属性;
Mybatis基于xml的动态sql实现的更多相关文章
- MyBatis之基于XML的动态SQL
先说下我的梦想,大学的时候一直想着是能开店卖胡辣汤,到目前依然还是我的梦想,上周一家出版社联系我问我有没有时间可以合作出书,这也是我的梦想之一,想了想还是放弃了,至少觉得目前不行,毕竟工作还不到五年, ...
- MyBatis基于注解的动态SQL——概览
- Mybatis基于接口注解配置SQL映射器(一)
上文已经讲解了基于XML配置的SQL映射器,在XML配置的基础上MyBatis提供了简单的Java注解,使得我们可以不配置XML格式的Mapper文件,也能方便的编写简单的数据库操作代码. Mybat ...
- Spring mybatis源码篇章-动态SQL节点源码深入
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-动态SQL基础语法以及原理 前话 前文描述到通过mybatis默认的解析驱动类org.apache.ibat ...
- MyBatis学习总结_11_MyBatis动态Sql语句
MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL
- SSM框架之Mybatis(6)动态SQL
Mybatis(6)动态SQL 1.动态SQL 出现原因:有些时候业务逻辑复杂时,我们的 SQL 是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了 1.1.if标签 我们根据实体类的不 ...
- Mybatis基于XML配置SQL映射器(三)
Mybatis之动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: if choo ...
- Mybatis基于XML配置SQL映射器(二)
Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档 sysUse ...
随机推荐
- max函数比较字符串类型
关于sql中 max函数比较字符串类型 max只比较首个字符的大小 只要首字母大,则不比较其他位置的字母,若首字母相同,则比较顺序位字母. 今天死在这了 数据库中 step字段类型char分别为 5. ...
- golang rabbitmq 的学习
https://www.rabbitmq.com/tutorials/tutorial-one-go.html Rabbitmq的任务分发机制 producer_task.go package mai ...
- 位运算在 PHP 实际项目当中的高级运用
我们首先来看一个系统中常见的需求: 有一个广告表,我们要对广告做显示控制: 手动上下线. 只允许 VIP 查看. 可能的表结构如下: CREATE TABLE `finger_ad` ( `ad_id ...
- CentOS7 安装特定版本的Docker
先卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-late ...
- [LeetCode] 380. Insert Delete GetRandom O(1) 插入删除获得随机数O(1)时间
Design a data structure that supports all following operations in average O(1) time. insert(val): In ...
- [LeetCode] 875. Koko Eating Bananas 可可吃香蕉
Koko loves to eat bananas. There are N piles of bananas, the i-th pile has piles[i] bananas. The g ...
- 2017ACM/ICPC广西邀请赛 1004 Covering
Covering Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- svn客户端清空账号信息的两种方法
1.直接删除配置 C:\Users\Administrator\AppData\Roaming\Subversion\auth 一般在这个文件夹下 2.svn的设置里清空
- DHCP、DHCP Snooping及DHCP relay工作原理入门及实践(转)
原文https://blog.51cto.com/5167020/2312718 序:DHCP服务相对简单,写本文的目的是为了讲一些DHCP安全方面的技术. 1.DHCP基础 DHCP 全称动态主机配 ...
- 为文献管理软件Mendeley设置代理
Mendeley由于某些原因无法在线同步,需要fq,在tools->option->connection中可以设置http代理或者sock5代理, sock5可以使用shadowsocks ...