动态SQL标签

所谓的动态SQL,本职还是SQL语句,只是可以在SQL层面,去执行一个逻辑代码

动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合。

建议:

  • 先在MySQL中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可。

if标签

根据标签test属性所对应的表达式判断标签中的内容是否拼接到sql中

当第一句sql出错时,会出现异常可以通过添加一个恒成立条件解决


where标签

当where标签中if判断成立,会自动生成where关键字,并且将内容前多余的and或or去掉
当where标签中if判断都不存在,where标签没有任何效果,where元素也会删除
注:where标签不能将and或or放在内容之后。

动态SQL标签_第1张图片


choos(where)标签 

类似与switch...case 

choose条件中只会满足所有分支的一个

都不满足则执行otherwise中的语句


set标签

set元素会动态前置set关键字,同时也会删除无关的逗号

一般用于更新语句


    update ???
        
            username=#{username},
            password=#{password},
        
    where id=#{id}

trim标签

trim包括where set标签

 prefix:前缀        prefixOverrides:前缀包括什么

suffix:后缀         suffixOverrides:后缀包括什么


可以通过自定义trim元素来定制where元素的功能

prefixOverrides属性会通过管道分隔的文本序列(此例中的空格也是必要的)。

它的作用是移除所有在指定prefixOverrides属性中的内容,并且插入prefix属性中的指定的内容。

与前缀类似

 
<--trim重改set-->

        update zy
            
                 `name`=#{name},
                 job=#{job},
            
            where id=#{id}
    

动态SQL

有的时候,我们可能会将一些功能的部分抽取出来,方便复用!

        1、使用SQL标签抽取公共部分


        
            and `name` LIKE "%"#{name}"%"
        
        
            job LIKE "%"#{job}"%"
        
        
            tel is not NULL
        
    

        2、在需要使用的地方使用include标签引用即可

 

注意事项:

  • 最好基于单表来定义SQL片段!
  • 不要存在where标签

Foreach

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语句的方法

利用foreach进行多个数据插入

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})
        
    

进行一个拼接即可

你可能感兴趣的:(笔记,sql,mybatis,数据库)