一、什么是动态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用法:
直接上一次例子: