文章目录
- 前言
- 一、标签
- 二、标签
- 三、标签
- 四、标签
- 五、标签
- 五、标签 与 标签
前言
动态sql是Mybatis的强大功能特性之一,能够完成不同条件下的sql拼接
以上是官方文档对动态SQL的介绍,简单来说动态SQL就是随着用户的输入或外部的条件的变化而变化的SQL语句,我们称为动态SQL
一、标签
:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL
比如我们要查询一个用户信息,我们可能会根据id查,也可能根据username查,也可能根据id和username一起查,这时我们的查询条件就不固定了,我们该怎么实现呢?就需要借助if标签了。
这里我们使用if标签就可以很好的应对传递不同类型的参数了。
只传递id:
同时传递id和username:
只传递username:
我们可以发现,当我们只传递usernma就会报错(SQL语法错误),那id和username都不传呢?
同样会报错,那是不是就是说if标签不能使用呢?不是,因为if标签需要搭配其他标签一起来使用(where和trim),我们Mybatis中多个参数都是非必传的参数的解决方案有多种方式:
方案1. 1 == 1
我们在where后面加上 1 = 1后,不管参数怎么传递都不会出现where多余或者and多余的SQL语法错误
方案2:trim标签
方案3:where标签
二、标签
where标签一共有两个作用:
1.当后面条件全部不成立时,会自动去掉where关键字,相当于查询全表信息
2.可以帮助我们去掉条件前面的and或or
这样可以完美的解决if标签使用时候的两种情况
我们再去执行,只传username:
我们可以发现where标签帮助我们去掉了条件前面的and,正确的执行了查询操作。
那id和username都不传呢?
我们可以发现where标签当if条件都不成立时帮我们去掉了where关键字
大家需要注意的是where标签会帮助我们去掉最前面的and关键字,但不会帮我们去掉最后面的and关键字
三、标签
如果我们在进行SQL操作时,如果所有的字段都是非必填时,就需要考虑使用trim标签了,结合if标签,对各个字段采取动态生成的方式。
trim标签有以下属性:
prefix:表示整个语句块,以prefix值为前缀
suffix:表示整个语句块,以suffix作为后缀
prefixOverrides:表示整个语句块要去掉的前缀
suffixOverrides:表示整个语句块要去掉的后缀
大家需要注意这里的prefix是否生成取决于后面的if条件是否判断成功
当后面条件全部判断失败时,是不会生成prefix前缀的
suffixOverrides会帮助我们去掉后面指定的and后缀。
大家可以根据我们的具体需求,来进行trim的四个参数的设置
四、标签
set标签主要有两个作用:
1.帮助我们去掉多余的后缀,
2.如果if条件全部判断失败,去掉set
set标签主要是针对更新操作,使用set标签可以进行不定参数的更新操作。
比如说我们进行更新操作,可能更新id的username,也可能更新id的password,也可能username和password都更新
我们可以发现当我们只传入username后面多了个,报了SQL语法异常
当我们username和password都不传时,多了set也报了SQL语法异常
我们来使用set标签:
我们使用set标签后,只传username属性时,可以发现帮助我们去掉了后缀多余的,
我们使用set标签时,username和password都不传时,帮我们去掉了set关键字,但仍然报语法错误,这种是业务上的错误,我们不必关注,一般在Controller层就会进行处理
五、标签
当我们想要进行批量操作时,就可以使用foreach标签,foreach标签有以下属性:
collection:绑定方法参数中的集合参数,如List,Set,Map或数组
item:遍历时的每一个元素
open:语句块开头的字符串
close:语句块结束的字符串
separator:每次遍历之间间隔的字符串
比如我们批量删除用户:
五、标签 与 标签
在 MyBatis 中,我们可以使用 元素定义可重用的 SQL 片段。这些 SQL 片段可以被其他 SQL 语句引用和包含,从而减少了代码的重复编写。同时,MyBatis 还支持使用 元素将外部 SQL 片段包含到当前的 SQL 语句中。
sql和include是一对标签,配套使用的,有一个经典的使用场景,比如我们在查询的时候并不想使用select *,因为效率太低,但是数据库的字段有太多,我们每次进行写SQL的时候都特别麻烦,这时我们就可以使用sql和include标签
总之,MyBatis 中的 和 元素非常实用,能够有效地减少代码的重复编写,提高 SQL 查询语句的可维护性和可读性。需要注意的是,为了避免 SQL 注入漏洞等安全问题,我们应该尽量使用参数化查询和预编译语句,而不是直接拼接字符串。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧。 首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实现的。话不多说,直接上代码。 /// /// 导出P…