MyBatis框架中的动态SQL:if、where、trim、foreach等标签的用法详解(含代码)

目录

if标签

where标签

trim标签

choose、when、otherwise

foreach标签


Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。

sql表字段如下:

MyBatis框架中的动态SQL:if、where、trim、foreach等标签的用法详解(含代码)_第1张图片

if标签

用于不确定根据哪几个字段查询的情况下,则可判断如果有此字段的值则拼接,否则跳过。

if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中反之标签中的内容不会执行

最后执行的sql语句:

select * from emp where 1=1 and name like concat('%',?,'%') and gender = ? and ...


where标签

跟单独使用if标签的区别就是加了where标签,可以不用在sql语句中写where 1=1,where标签中的if语句满足会自动在sql语句中加入where关键字

where和if一般结合使用:

a>若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字

b>若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的

and去掉

注意:where标签不能去掉条件最后多余的and


trim标签

trim用于去掉或添加标签中的内容常用属性:

prefix:在trim标签中的内容的前面添加某些内容

prefixOverrides:在trim标签中的内容的前面去掉某些内容

suffix:在trim标签中的内容的后面添加某些内容

suffixOverrides:在trim标签中的内容的后面去掉某些内容

比如,条件查询需要where关键字,那么就可以在trim标签中添加prefix="where"


choose、when、otherwise

choose、when、otherwise相当于if...else if..else

只会拼接一个标签内的内容


foreach标签

foreach 标签通常用于对集合进行迭代,生成动态的SQL语句。

collection 属性指定要迭代的集合

item 属性指定在迭代过程中每个元素的别名

index 属性指定在迭代过程中的索引值

open 属性指定在迭代开始时插入的字符串

separator 属性指定在每个元素之间插入的字符串

close 属性指定在迭代结束时插入的字符串。

示例如下:

sql:insert into emp values (null, ?, ?, ?, ?, ?)




    insert into emp values
    
    
        (null,#{emp.name},#{emp.gender},#{emp.salary},#{emp.joinDate},#{emp.deptId})
    

sql:delete from emp where ? or ? or?




    delete from emp where
    
     id = #{eid}
    

sql:delete from emp where id in (?,?,?,...)




    delete from emp where id in
    
        #{eid}
    

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