MyBatis----映射文件的深入之动态SQL

动态sql

Mybatis的映射文件中,前面我们的SQL都是比较简单的,有些时候业务逻辑复杂时,我们的SQL是动态变化的,
此时在前面的学习中我们的SQL就不能满足要求了。
而,我们使用动态sql可以使我们的sql语句有多种可能性,根据不同语句使用不同的语法。

动态sql之if

Mybatis的映射文件,可在sql语句中使用sql来根据当前情况来使用不同的语句:
下面是一个多条件聚合查询。向查询语句中传入一个类,可根据类的属性进行查询,当属性值为空,则跳过此属性,当属性值不为空,则合并此条件进行查询
在这里插入图片描述这里,where标签相当于sql中的where字段。当所有的属性都为空,则在程序执行的时候,where不会在sql语句中出现,此时sql语句变为一个无条件全查询,会查询出表中的所有数据
测试:在这里插入图片描述
结果:在这里插入图片描述

动态sql之foreach

foreach:查询所有,符合给定条件中的任意一个条件的数据在这里插入图片描述这里等同于select * from user where id in(值,值,值…)

这里foreach标签有几个属性,得说明一下:

collection:设置存储条件的容器类型。比如这里,我们打算是创建一个list集合,集合中存储多个Integer数据,然后查询表中所有id符合此list的记录。这里我们用的是list集合,所欲这里的值是list,如果是数组,则这里设置为array

这里foreach的原理好像是我们设置字符,然后由java帮我们拼接成sql语句的。
open:所以这里的open表示where后面紧跟着的固定的部分,我们这里仅仅是一个查询id的简单查询,所以设置为"id in("

close:即查询语句最后面固定那一部分,这里即是一个")"

item:这里等于设置一个变量,这里其实就有点像java中的foreach了,这里就意思是取出集合中的数据,然后放在这个变量中,供我们后面使用

separator:用于设置分隔符,因为远离好像是拼接的,所以这里,需要分隔符

然后在foreach标签中有一个#{i},此处就等于取出前面item中的数据,拼接在sql语句中。

SQL片段的抽取

映射文件中,我们可能有多个对同一数据表的不同操作,有些SQL语句前半部分都是重复的,我们则可以使用片段抽取。
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值