本节主要内容
1:动态sql使用(wher标签、if标签、set标签的使用)
2:总结
本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第十四篇 mybatis动态sql一
声明:本文系凯哥Java(www.kaigejava.com)原创,未经允许,禁止转载!
一:动态sql的使用。
1.1:什么是动态sql?为什么需要使用到动态sql?
在mybatis中,提供了一些动态的sql标签。比如动态的去判断字段如果没值就不添加到where语句中
使用动态sql标签可以让程序员更快的进行mybatis的开发。
动态sql还可以提高sql的可复用性
1.2:常用的sql标签有哪些?
if标签、where标签、set标签、trim标签、sql片段、foreach标签等
1.2.1:if/where标签的使用
需求:有时候我们查询的条件是多个,比如查询条件为用户名和性别但是这两个条件都可以为空。那么这样的情况下mybatis中怎么实现呢?这里就可以使用where和if标签了。
先看不加判断的sql语句怎么写?
我们看到where和and。也就是说,当username和sex都有值的时候 使用where和and
那如果只有sex怎么办?或者只有username怎么办?这种情况下,上面语句就会出问题了。
所以,可以使用where标签和if标签。
小二,先上截图,给大爷们看看,然后咱们在讲解。
在Mapper-User.xml文件中:
说明:
<where>:声明where标签开始
</where>:表示where标签结束
<if>:if标签开始
test:是判断的表达式。
注意,在表达式中并且是用字母and而非使用&符号
字符串判断双引号套单引号使用
</if>:if标签结束
说明:
where标签会自动判断前面是否有字段,如果有字段会使用and sex=${sex}这个语句。
如果没有字段,and会被忽略直接跟在where后面。
也就是说,如果username为空但是sex不为空的话。输入的sql又是什么?
测试类:
控制台输出的sql:
可以看到,and直接被忽略掉了。
1.2.2:set标签
set标签一般使用再update语句配合if标签使用,比如我们根据id更新用户名和性别先看正常的sql语句:
我们看到,在set username和sex中间有逗号的。假如,username为空,经过if标签过滤之后,那么上面的sql语句就变成了 updae user set , sex=${sex} where id=${id]。这个sql语句就不能正确执行。所以解决这个问题,可以使用set和if标签配合使用。
先看mapper-User.xml文件怎么写:
说明:
需要注意的是:这里使用了${}如果数据类型为string类型的,需要添加单引号。
(ps:还记得mybaits中${}和#{}之间的区别吗?如果忘记了,可以回看《框架学习系列 mybatis 第五篇 mybatis入门程序之需求开发2根据用户名模糊查询》这篇文章,在文章最后总结处有写到${}和#{}的区别)
先看更新之前数据库数据:
现在只是更新id为28的用户名为:“凯哥官网”
测试代码:
执行结果:
在查看数据库:
二:总结
通过本文学习,我们需要掌握的
1:where 、if标签的结合使用。这个在公司中很常用的
2:set、if标签的使用