什么是动态****sql:在不同条件下拼接不同的sql
Mybatis框架的动态sql技术是一种根据特定条件动态拼接SQl语句的功能,他存在的意义是为了解决拼接SQL语句字符串时的痛点问题。比如我们在用淘宝之类的软件在进行商品属性选择的时候,我们会发现我们可以选择的商品的属性有很多条件,其中一些条件可以选择也可以不选择,那么如果使用传统的方式进行查询,反而在拼接sql的时候会造成一些列的问题。
传统的sql:
例如:根据 username 和 sex 来查询数据。如果username为空,那么将只根据sex来查询;反之只根据username来查询,上面的查询语句,我们可以发现,如果 #{username} 为空,那么查询结果也是空,如何解决这个问题呢?使用 if 来判断
使用动态sql。
如果加了where标签,如果username为空,sex不为空,会自动将sex前面的and去除,sql语句能够正常执行
注意:最后一个语句后面不用加逗号,
update user
username = #{username} ,
address = #{address}
where id = #{id}
这个标签相当于是我们java当中的if…else if…else
< choose> 标签是这个标签组合当中的父标签和标签都在标签内部。
< when> 标签就相当于是我们的 if 和 else if
< othrtwise >标签相当于是我们的 else 如果最终都不满足则执行这个
trim标记是一个格式化的标记,可以完成set或者是where标记的功能
prefix:前缀
prefixoverride:去掉第一个and或者是or
update user
username = #{username},
sex = #{sex},
where id = #{id}
有些时候我们的数据是以数组的形式出现的,比如我们进行批量删除和批量添加的时候
delete from user where id in
#{id}
insert into user(id,username,birthday,sex,address) values
(null,#{user.username},#{user.birthday},#{user.sex},#{user.address})