https://mybatis.org/mybatis-3/zh/dynamic-sql.html
OGNL表达式介绍
[https://www.cnblogs.com/renchunxiao/p/3423299.html]
动态 SQL简介
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。
如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。
查询的时候如果某些条件没带,可能sql拼接会有问题
1、给where后面加上1=1,以后的条件都and xxx。
2、mybatis使用where标签来将所有的查询条件包括在内。mybatis就会将where标签中拼装的sq1,多出来的and或者or去掉,//where只会去掉第一个多出来的and或者or。
if
choose (when[封装查询条件], otherwise[封装修改条件])分支选择;带了break的swtich-case
如果带了id就用id查,如果带了lastName就用lastName查;== 只会进入其中一个==,假如满足多个条件,只会查询最靠前的条件。
when
trim (where, set)【自定义字符串的截取规则】
** 后面多出的and或者or ,where标签不能解决
prefix="":前缀:trim标签体中是整个字符串 拼串后的结果。
prefix给拼串后的整个字符串加一个前缀
prefixOverrides="":
前经覆盖:去掉整个字符串前面多余的字符
suffix="":后缀
suffix给拼串后的整个字符串加一个后缀
suffixoverrides=""
后缀覆盖:去掉整个字符串后面多余的字符 **
where
trim:where
where标签的使用
set
set标签的使用
Trim:更新
foreach
**
collection:指定要遍历的集合:
List类型的参数会特殊处理封装在map中,map的key就叫list
item.将当前遍历出的元素赋值给指定的变量
separator:每个元素之间的分隔符
open:遍历出所有结果拼接一个开始的字符
close:遍历出所有结果拼接一个结束的字符
index:索引。遍历1ist的时候是index就是索引,item就是当前值
遍历map的时候index表示的就是map的key,item就是map的值
#{变量名}就能取出变量的值也就是当前遍历出的元素
**
批量保存
bind,传入参数时不带“%”,在sql语句里自动拼接,即给拼好的sql语句起一个别名,后面用别名。
<!–bind:可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值–>
<!––>
或者用${},直接拼接%,但是不安全
两个内置参数
两个数据库(mysql,oracle)都可以查询
如果lastnaem=null,则where last_name=null语句不会拼接在sql语句后面,会查询全部信息
或者
没有用if标签的结果:lasname=null,就查不到结果
sql标签:抽取可重用的sq1片段。方便后面引用