动态 SQL是MyBatis强大特性之一。极大的简化我们拼装 SQL的操作。
• 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处 理器相似。
• MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作。
– if – choose (when, otherwise)
– trim (where, set)
– foreach
if
choose (when, otherwise)
trim (where, set)
where
set
trim
foreach
• 动态 SQL 的另外一个常用的必要操作是需要对一个集合 进行遍历,通常是在构建 IN 条件语句的时候
• 当迭代列表、集合等可迭代对象或者数组时 – index是当前迭代的次数,item的值是本次迭代获取的元素 • 当使用字典(或者Map.Entry对象的集合)时 – index是键,item是值
bind
• bind 元素可以从 OGNL 表达式中创建一个变量并 将其绑定到上下文。比如:
Multi-db vendor support
• 若在 mybatis 配置文件中配置了 databaseIdProvider , 则可 以使用 “_databaseId”变量,这样就可以根据不同的数据库 厂商构建特定的语句
OGNL( Object Graph Navigation Language )对象图导航语言,这是一种强大的 表达式语言,通过它可以非常方便的来操作对象属性。 类似于我们的EL,SpEL等
访问对象属性: person.name
调用方法: person.getName()
调用静态属性/方法: @java.lang.Math@PI @java.util.UUID@randomUUID()
调用构造方法: new com.atguigu.bean.Person(‘admin’).name
运算符: +,-*,/,%
逻辑运算符: in,not in,>,>=,<,<=,==,!= 注意:xml中特殊符号如”,>,<等这些都需要使用转义字符
访问集合伪属性: