mybatis的动态SQL(精简版)

目录

if

choose,when,otherwise

where 

set

include

forEach 

 


if

当where后的条件不一定会存在时,需要用if判断要不要有这个条件。

例如:当title不一定会被传过来时,可以判断title是否是空,再把后面的sql语句拼起来。 

    

choose,when,otherwise

有时候where后面的条件不是全都必须要判断的,只会匹配第一个满足的条件。

choose类似于java的switch语句。

例如:当title不为空时,就只判断title;若title为空,则只判断author;若两个属性都为空,则走默认的featured条件。 

    

where 

我们用的if标签或者choose标签等等,它们都是在sql语句里写了and或者or,所以不能当第一个条件。但是有时候where的第一个条件不一定会存在,此时用where标签,它会自动把满足条件的sql语句的第一个and或者or忽略。

并且,若所有的条件都不满足,它也会自动忽略where。

例如:这里的state条件和title条件都不一定存在,当至少有一个条件存在时,它会自动把第一个满足条件的sql里的and忽略,不会让该sql报错。 并且若所有的条件都不满足,它会忽略where。

    

set

set标签可以把最后一个属性后面的逗号忽略,防止报错。

因为使用update语句时,有些属性可能不需要更新值,要用if标签,但if标签内的sql是固定的,里面的逗号需要判断是不是最后一个属性,若是最后一个属性则不能有逗号。

例如:若username和password不为空,则需要更新值,但我们不知道这两个谁会是要更新的最后一个属性,要忽略的最后一个逗号不确定是哪个,此时用set标签可以自动忽略最后一个逗号。

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

include

把sql分出来,需要用的时候用include标签引用进来。 

例如:这里把title的判断和author的判断分出来,当我需要用到这个判断时,再用include标签来引用。 

    
       
            title = #{title}
       
       
            author = #{author}
       
   

    

forEach 

当我传来一个集合,需要对集合进行遍历时。

item:该集合遍历出来的内容的变量名

index:索引。可以指定要遍历的是第几个元素,若要全部遍历则不写这个属性。

                       若传的是map集合,则index是键名,item是值的变量名

collection:遍历的集合的名字

open:在这个sql最前面加上的内容

separator:分隔符,把集合的内容读取出来并用分隔符来分开

close:在这个sql最后面加上的内容

例如: 

collection为ids,则我传来的list变量名为ids;

item为id,则我的sql里写的变量名为#{id};

open为左括号,close为右括号。因为in语句需要用括号把内容括起来;

separator为逗号,因为in语句中需要把每个元素通过逗号分隔。

    
    @Test
    public void findBlog() {
        List ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        ids.add(3);
        List blogs = allMapper.findBlog();
        for (Blog blog : blogs) {
            System.out.println(blog);
        }
    }

 

 

 

 

 

 

 

 

你可能感兴趣的:(知识杂谈,sql,mybatis,数据库,java,mysql)