Mybatis学习笔记——动态Sql

关于条件的判断

  • if      判断语句
  • choose (when, otherwise) 类似于switch case语句

if 和 when 都需要与test属性连用,test为具体判断逻辑

Mybatis学习笔记——动态Sql_第1张图片

Mybatis学习笔记——动态Sql_第2张图片

  • 在判断之前都加1=1的原因是:如果不加1=1,当断语句返回false时,后面判断部分的sql为空,这样整体sql语句就变成了xxx where,因而会出错
  • 可以通过使用where或trim元素去掉1=1这样的语句

对sql语句进行相关修饰的元素(where,set,trim)

where

where元素的作用是:描述sql中的where条件部分,当where条件为空时,此时where语句为空(不出现where关键字);当where条件不为空时,它可以忽略where条件部分首个AND或OR

set

 
      update user 
        
          
            id=#{id},
          
          
            name=#{name},
          
          
            gender=#{gender},
          
        

set元素的作用:描述update语句中的set部分,可以或略掉最后一个逗号

trim

包含的属性:

  • prefix:前缀
  • suffix:后缀
  • prefixOverrides:忽略第一个指定分隔符
  • suffixOverrides:忽略最后一个指定分隔符
//与上面等同的where例子

//与上面等同的set例子


    update user 
      
        
          id=#{id},
        
        
          name=#{name},
        
        
          gender=#{gender}
        
        
  

foreach

循环语句,接收的类型是:list、set、map、数组等

参数:

  • collection , 要进行迭代的元素
  • index  为索引定义一个名字,表示每次迭代到的位置(map为其key)
  • item   当前迭代到的元素别名
  • open  循环区间对应的sql语句部分的前面加上的字符串(以什么开始)
  • close 循环区间对应的sql语句部分的后面加上的字符串(以什么结束)
  • separate 循环内容以什么分隔
(1)批量插入

      insert into user(id,name,gender) values
        
          (#{user.id},#{user.name},#{user.gender})
        

(2)批量删除


        delete from user where id in
          
            #{id}
          

注意:如果集合为空,sql语句会出问题,因此需要在业务层进行判断集合是否为空

bind元素

用于定义上下文变量


Mybatis学习笔记——动态Sql_第3张图片


你可能感兴趣的:(JAVA)