码迷,mamicode.com
首页 > 数据库 > 详细

Mybatis动态SQL

时间:2015-06-18 08:09:48      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

1、动态SQL简介

  动态SQL是Mybatis框架中强大特性之一。在一些组合查询页面,需要根据用户输入的查询条件生成不同的查询SQL,这在JDBC或其他相似框架中需要在代码中拼写SQL,经常容易出错,但是在Mybatis中可以解决这种问题。

  使用动态SQL元素与JSTL相似,它允许我们在XML中构建不同的SQL语句。常用的元素如下

    判断元素:if,choose

    关键字元素:where,set,trim

    循环元素:foreach

2、if元素

  if元素是简单的条件判断逻辑,满足指定条件时追加if元素内的SQL,不满足条件时不追加。使用格式如下

<select...>
    SQL语句1
    <if test="条件表达式">
        SQL语句2
    </if>
</select>

  if元素最常见的使用是在where子句部分,根据不同情况追加不同的SQL条件。示例代码如下

<select id="findByDeptNo" parameterType="Emp" resultType="Emp">
    select * from EMP
    <if test="deptno!=null">
        where DEPTNO=#{deptno}
    </if>
</select>

3、choose元素

  choose元素的作用就相当于Java中的switch语句,基本上跟JSTL中的choose的作用和用法是一样的,通常与when和otherwise搭配使用。choose使用格式如下:

<select...>
    SQL语句1
    <chose>
        <when test="条件表达式">
            SQL语句2
        </when>
        <otherwise>
            SQL语句3
        </otherwise>
    </chose>
</select...>

  choose元素的使用示例代码如下:

<select id="findBySal" resultType="Emp" parameter="Emp">
    select * from EMP where
    <choose>
        <when test="sal>2000">
            SAL>=#{sal}
        </when>
        <otherwise>
            SAL>=2000
        </otherwise>
    </choose>
</select>

4、where元素

  where元素主要是用于简化查询语句中where部分的条件判断。where元素可以在<where>元素所在位置输出一个where关键字,而且还可以将后面条件多余的and或or关键字去除。

  where使用格式如下:

<select...>
    select 字段 from 表
    <where>
        动态追加条件
    </where>
</select...>

  where元素的使用示例代码如下

<select id="findByCondition" resultType="Emp" parameterType="Emp">
    select * from EMP
    <where>
        <if test="deptno!=null">
            DEPTNO=#{deptno}
        </if>
        <choose>
            <when test="sal>2000">
                and SAL>#{sal}
            </when>
            <otherwise>
                and SAL>=2000
            </otherwise>
        </choose>
    </where>
</select>

5、set元素

  set元素主要是用在更新操作的时候,它的主要功能和where元素相似,主要是在<set>元素所在位置输出一个set关键字,而且还可以去除内容结尾中无关的逗号。有了set元素我们就可以动态的更新那些修改了的字段。

  set使用格式如下:

<update...>
    update 表
    <set>
        动态追加更新字段
    </set>
</update...>

  set元素的使用示例代码如下:

<update id="updateEmp" parameterType="Emp">
    update EMP
    <set>
        <if test="ename!=null">
            ENAME=#{ename},
        </if>
        <if test="sal!=null">
            SAL=#{sal},
        </if>
        <if test="deptno!==null">
            DEPTNO=#{deptno}
        </if>
    </set>
    where EMPNO=#{empno}
</update>

6、trim元素

  trim元素的主要功能如下:

    可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;

    可以把包含内容的首部某些内容过滤,即忽略,也可以把尾部的某些内容过滤,对应的属性是prefixOverrides和suffixOverriides;

    正因为trim有上述功能,所以我们也可以非常简单的利用trim来代替where和set元素的功能

  

Mybatis动态SQL

标签:

原文地址:http://www.cnblogs.com/Crow00/p/4584784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!