Mybatis 动态SQL的使用:
简介
- 动态SQL是MyBatis强大特性之一。极大的简化我们拼装SQL的操作
- 动态SQL元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似
- MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作
- If
- choose (when, otherwise)
- trim (where, set)
- foreach
OGNL( Object Graph Navigation Language )对象图导航语言,这是一种强大的表达式语言,通过它可以非常方便的来操作对象属性。 类似于我们的EL,SpEL等
功能 | 参数 |
---|---|
访问对象属性 | person.name |
调用方法 | person.getName() |
person.getName() | @java.lang.Math@PI @java.util.UUID@randomUUID() |
调用构造方法 | new com.atguigu.bean.Person(‘admin’).name |
运算符 | +,-*,/,% |
逻辑运算符 | in,not in,>,>=,<,<=,==,!= |
注意:xml中特殊符号如”,>,<等这些都需要使用转义字符
项目结构
数据准备
项目结构
Department
1 | package com.hph.mybatis.beans; |
Employee
1 | package com.hph.mybatis.beans; |
EmployeeMapperDynamicSQL
1 | package com.hph.mybatis.dao; |
EmployeeMapperDynamicSQL.xml
1 | <?xml version="1.0" encoding="UTF-8" ?> |
TestMybatisDynamicSQL
1 | package com.hph.mybatis.test; |
if where
If用于完成简单的判断.
Where用于解决SQL语句中where关键字以及条件中第一个and或者or的问题
1 | <!-- public List<Employee> getEmpsByConditionIfWhere(Employee Condition); --> |
1 | public void testIf() throws Exception { |
1 |
|
trim
1 | <select id="getEmpsByConditionTrim" resultType="com.hph.mybatis.beans.Employee"> |
1 |
|
set
set 主要是用于解决修改操作中SQL语句中可能多出逗号的问题.
1 | <update id="updateEmpByConitionSet"> |
1 |
|
choose(when、otherwise)
choose 主要是用于分支判断,类似于java中的switch case,只会满足所有分支中的一个
1 | <!-- public void updateEmpByConitionSet(Employee condition);--> |
1 |
|
foreach
foreach 主要用户循环迭代
collection: 要迭代的集合
item: 当前从集合中迭代出的元素
open: 开始字符
close:结束字符
separator: 元素与元素之间的分隔符
index:
迭代的是List集合: index表示的当前元素的下标
迭代的Map集合: index表示的当前元素的key
1 | <!-- public List<Employee> getEmpsByIds(@Param("ids")List<Integer> ids);--> |
1 |
|
1 | <!-- |
1 |
|
sql
sql 标签是用于抽取可重用的sql片段,将相同的,使用频繁的SQL片段抽取出来,单独定义,方便多次引用.
抽取SQL
1 | <sql id="selectSQL"> |
引用SQL:
1 | <include refid="selectSQL"></include> |