MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。
1、if 标签
使用 if 元素判断,如果值为 null 或等于空字符串,我们就不进行此条件的判断,增加灵活性。
或者 if-else 写法
2、foreach 标签
foreach 的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合,用于传入一个list参数。
public void delQuestion(@Param("idList") List idList);
AND id IN
#{id}
- 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list。
- 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array。
- 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可。
(1)实现批量更新
update course
when id=#{item.id} then #{item.name}
when id=#{item.id} then #{item.title}
where
id=#{item.id}
(2)实现批量删除
delete from emp where empno in
#{arr}
(3)实现批量插入or更新数据(MySQL库)
//批量新增or更新数据
public Boolean InsertOrUpdate_List(List info);
insert into UesrInfo (id,type,name)
values
(#{info.id},#{info.type},#{info.name})
ON DUPLICATE KEY UPDATE
type = VALUES(type),name = VALUES(name)
3、include 标签
在数据库的使用中,查询的时候时候不要使用*号,*是查询所有,可以用include来拼接SQL语句。
id,title,small_pic,intime,status,inuser,org_name,org_id,online_from_date,online_to_date,source_type,update_time,org_type
4、trim 标签
trim标记是一个格式化的标记,可以完成set或者是where标记的功能,自定义格式。有如下属性:
- prefix:在trim标签内sql语句加上前缀。
- suffix:在trim标签内sql语句加上后缀。
- suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句多余的后缀","。
- prefixOverrides:指定去除多余的前缀内容。
demo展示:
insert into cart
id,
user_id,
deal_id,
#{id,jdbcType=BIGINT},
#{userId,jdbcType=BIGINT},
5、 特殊字符
在mapper文件中写sql语句时,遇到特殊字符时,不被解析器解析。
(1)
(2)转移符
符号 | 转移符 | 说明 |
---|---|---|
> | > |
大于 |
< | < |
小于 |
>= | >= |
大于等于 |
<= | << |
小于等于 |
& | & |
和 |
‘ | ' |
单引号 |
“ | " |
双引号 |