所谓的动态SQL,本职还是SQL语句,只是可以在SQL层面,去执行一个逻辑代码
动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合。
建议:
根据标签test属性所对应的表达式判断标签中的内容是否拼接到sql中
当第一句sql出错时,会出现异常可以通过添加一个恒成立条件解决
当where标签中if判断成立,会自动生成where关键字,并且将内容前多余的and或or去掉
当where标签中if判断都不存在,where标签没有任何效果,where元素也会删除
注:where标签不能将and或or放在内容之后。
类似与switch...case
choose条件中只会满足所有分支的一个
都不满足则执行otherwise中的语句
set元素会动态前置set关键字,同时也会删除无关的逗号
一般用于更新语句
update ???
username=#{username},
password=#{password},
where id=#{id}
trim包括where set标签
prefix:前缀 prefixOverrides:前缀包括什么
suffix:后缀 suffixOverrides:后缀包括什么
可以通过自定义trim元素来定制where元素的功能
prefixOverrides属性会通过管道分隔的文本序列(此例中的空格也是必要的)。
它的作用是移除所有在指定prefixOverrides属性中的内容,并且插入prefix属性中的指定的内容。
与前缀类似
<--trim重改set-->
update zy
`name`=#{name},
job=#{job},
where id=#{id}
有的时候,我们可能会将一些功能的部分抽取出来,方便复用!
1、使用SQL标签抽取公共部分
and `name` LIKE "%"#{name}"%"
job LIKE "%"#{job}"%"
tel is not NULL
2、在需要使用的地方使用include标签引用即可
注意事项:
select * from user where 1=1 and (id=1 or id=2 or id=3)
动态SQL的另一个常用的操作需求是对一个集合进行遍历,通常是在构建IN条件语句的时候
collection是数组名 用于获取数组
item是值 用于引用
open 前缀 close 后缀 or 连接符
id=#{id} 是遍历后输入到sql语句中的句子
简易来说foreach就是一个拼接SQL语句的方法
insert into tableName (num1,num2,num3)
values
(1,2,3),
(4,3,4),
(1.23,9); SQL语句
insert into zy(id,name)values
(#{user.id},#{user.name})
进行一个拼接即可