MyBatis框架
第5章:MyBatis 动态SQL
5.1 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()
调用静态属性/方法: @java.lang.Math@PI
@java.util.UUID@randomUUID()
调用构造方法: new com.atguigu.bean.Person(‘admin’).name
运算符: +,-*,/,%
逻辑运算符: in,not in,>,>=,<,<=,==,!=
注意:xml中特殊符号如”,>,<等这些都需要使用转义字符
5.2 if where
- If用于完成简单的判断.
- Where用于解决SQL语句中where关键字以及条件中第一个and或者or的问题
<select id="getEmpsByConditionIf" resultType="com.atguigu.mybatis.beans.Employee"> select id , last_name ,email , gender from tbl_employee <where> <if test="id!=null"> and id = #{id} </if> <if test="lastName!=null && lastName!="""> and last_name = #{lastName} </if> <if test="email!=null and email.trim()!=''"> and email = #{email} </if> <if test=""m".equals(gender) or "f".equals(gender)"> and gender = #{gender} </if> </where> </select> |
5.3 trim
- Trim 可以在条件判断完的SQL语句前后 添加或者去掉指定的字符
prefix: 添加前缀
prefixOverrides: 去掉前缀
suffix: 添加后缀
suffixOverrides: 去掉后缀
<select id="getEmpsByConditionTrim" resultType="com.atguigu.mybatis.beans.Employee"> select id , last_name ,email , gender from tbl_employee <trim prefix="where" suffixOverrides="and"> <if test="id!=null"> id = #{id} and </if> <if test="lastName!=null && lastName!="""> last_name = #{lastName} and </if> <if test="email!=null and email.trim()!=''"> email = #{email} and </if> <if test=""m".equals(gender) or "f".equals(gender)"> gender = #{gender} </if> </trim> </select> |