MyBatis动态SQL

本文介绍了MyBatis中动态SQL的使用,重点讲解了`if`和`foreach`标签的应用。`if`标签允许根据条件插入不同的SQL片段,避免空值查询;`foreach`标签则用于处理集合数据,例如在`IN`查询中动态构建条件。通过这两个标签,可以构建更复杂的、灵活的SQL语句,提高代码的可读性和维护性。同时,还提到了SQL片段的抽取,以减少重复代码。
摘要由CSDN通过智能技术生成

动态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语句前半部分都是重复的,我们则可以使用片段抽取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值