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 &amp;&amp; lastName!=&quot;&quot;">

                                     and last_name = #{lastName}

                            </if>

                            <if test="email!=null and email.trim()!=''">

                                     and email = #{email}

                            </if>

                            <if test="&quot;m&quot;.equals(gender) or &quot;f&quot;.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 &amp;&amp; lastName!=&quot;&quot;">

                                      last_name = #{lastName} and

                            </if>

                            <if test="email!=null and email.trim()!=''">

                                      email = #{email} and

                            </if>

                            <if test="&quot;m&quot;.equals(gender) or &quot;f&quot;.equals(gender)">

                                     gender = #{gender}

                            </if>

                   </trim>

</select>