Mybatis动态Sql

动态 SQL是MyBatis强大特性之一。极大的简化我们拼装 SQL的操作。

• 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处 理器相似。

• MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作。

– if – choose (when, otherwise) 
– trim (where, set) 
– foreach

if

image-20200116164957914

choose (when, otherwise)

image-20200116165030751

trim (where, set)

where

image-20200116165101520

set

image-20200116165128304

trim

image-20200116165156555

foreach

• 动态 SQL 的另外一个常用的必要操作是需要对一个集合 进行遍历,通常是在构建 IN 条件语句的时候

image-20200116165238329

• 当迭代列表、集合等可迭代对象或者数组时 – index是当前迭代的次数,item的值是本次迭代获取的元素 • 当使用字典(或者Map.Entry对象的集合)时 – index是键,item是值

bind

• bind 元素可以从 OGNL 表达式中创建一个变量并 将其绑定到上下文。比如:

image-20200116165419880

Multi-db vendor support

• 若在 mybatis 配置文件中配置了 databaseIdProvider , 则可 以使用 “_databaseId”变量,这样就可以根据不同的数据库 厂商构建特定的语句

image-20200116165445085

image-20200116165458022

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中特殊符号如”,>,<等这些都需要使用转义字符

访问集合伪属性:

image-20200116165927364