MyBatis动态SQL大全

一、什么是动态SQL

MyBatis的动态SQL是基于OGNL的表达式的。它对SQL语句进行灵活的操作,通过表达式判断来实现对SQL的灵活拼接、组装。

二、动态SQL介绍

下面是用于实现动态SQL的主要元素:

if
choose(when,otherwise)
trim
where
set
foreach

(1)、if元素
在动态SQL中所作的最通用的事情就是包含部分where子句的条件


2.choose,when,otherwise元素。类似java中的switch…case…,MyBatis提提供choose


3.trim元素
trim和where同级,其主要功能是可以在自己包含的内容前或后加上某些前后缀,与之对应的属性是prefix和suffix;也可以把内容的首部或尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;


		
			
				LOAN_NO = #{loanNo},
			
			
				CUST_NO = #{custNo},
			
		
		WHERE LOAN_NO=#{loanNo}
	

4.set元素

set元素可以被用于动态包含更新的列,不包含不需要更新的,并且会动态的前置set关键字,也可以相除任意无关的逗号。

    
    update user_table   
       
            
            AND A.userId = #{userId,jdbcType=CHAR}    
            
            
            AND A.userName = #{userName,jdbcType=CHAR}    
           
              
    where userId=#{id}    
  

5.foreach元素
foreach的主要用在构建in条件中,他可以迭代一个集合。foreach元素的属性主要有:item,index,collection,open,separator,close。

下面对属性进行简单的介绍:

item:表示集合中每一个元素进行迭代时的别名。

index:指定一个名字,用于表示在迭代过程中每次迭代的位置。

open:表示以什么开始。

separator:每次迭代以什么分割。

close:以什么关闭。

collection:最重要且必须指定的有三种情况:

1.如果传入的是单独参数的List类型时,collection的属性值为list。

2.如果传入的是单独参数的数组时,collection的属性值为array.

3.如果传入多个参数时,我们把多个参数放入map中,单参数也可以放入map中。map中的key就是参数名,所以collection属性值就是传入的List或者array对象在Map里的key。

下面列举每种情况的案例:

1.单参数List类型:

  

2.单参数数组array类型

  

3.多参数Map类型

  

对应的分装成map的部分java代码:

List ids = new ArrayList();  
        ids.add(1);  
        ids.add(2);  
        ids.add(3);  
        ids.add(6);  
        ids.add(7);  
        ids.add(9);  
        Map params = new HashMap();  
        params.put("ids", ids);  

批量插入方法:


    INSERT INTO t_user
            (id, name, del_flag)
    VALUES
    
         (#{user.id}, #{user.name}, #{user.delFlag})
    


作者:谈笑_风生
来源:CSDN
原文:https://blog.csdn.net/m0_37981235/article/details/79131493
版权声明:本文为博主原创文章,转载请附上博文链接!

5、Case when then else end用法:
直接上一次例子:


你可能感兴趣的:(MyBatis)