MyBatis基础知识_03

一、什么是动态sql

1.动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 SQL 恰好解决了这一问题,可以根据场景动态的构建查询。

2.动态SQL:code that is executed dynamically。 它一般是根据用户输入或外部条件动态组合的SQL语句块。 动态SQL能灵活的发挥SQL强大的功能、方便的解决一些其它方法难以解决的问题。 相信使用过动态SQL的人都能体会到它带来的便利,然而动态SQL有时候在执行性能 (效率)上面不如静态SQL,而且使用不恰当,往往会在安全方面存在隐患 (SQL 注入式攻击)。

1.动态sql是做什么的

Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。

二、动态sql标签

元素作用备注
if判断语句单条件分支判断
choose(when、otherwise)相当于 Java 中的 switch case 语句多条件分支判断
trim,where辅助元素用于处理一些SQL拼装问题
foreach循环语句在in语句等列举条件常用
bind辅助元素拼接参数
set辅助元素用于修改的sql语句

1.if标签:条件判断

if标签就类似java中的if判断,是MyBatis中常用的标签,使用if标签可以省略掉拼接sql的过程,直接在XML文件内进行

(1)不使用if判断

(2)使用if判断

如上的sql语句,如果id为空,那么查询结果就是空。这时候就可以用if判断来解决

这里可以跟where标签搭配使用,在where标签里写if标签,有多个条件那就多加几个if即可

如上sql语句,如果id为空的话,那么这条sql语句就只会执行这一句select * from emp,后面的and条件就会因为判断条件不通过而不执行。这里如果是正常写的话,where后面直接就是empId=#{id}。也不用担心这个if判断里面的and,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。

2.set标签

set标签用于修改,同样也能与if标签搭配使用,这里不做过多叙述

3.choose(when,otherwise) 标签

有时候不想用所有的查询条件,只想用单个条件去查询,这时候就可以使用choose标签,此标签就类似于else if

总的来说,就是根据你这些判断条件的顺序去执行。

如果name不为空,那么就会执行select * from users where userName=? 的sql语句,就没有后续了

如果name为空,就会继续往下判断,如果pass也为空的话,when(类似else if)标签的两条判断就结束了

接下来执行otherwise(类似最后的else)标签,这条判断是如果前面的条件都不满足,最后就会执行此判断

4.foreach标签

- foreach是用来对集合的遍历,这个和Java中的功能很类似。通常处理SQL中的in语句。

- foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。这个元素也不会错误地添加多余的分隔符

- 你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素,open是循环开始时在开头加上‘(’,close时循环结束时加上‘)’。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。

5.测试类

批量删除这里是使用的数组,也可以换成list集合去写,效果都一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值