Mybatis框架之动态SQL书写方式小结

动态SQL简介

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

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

判断元素:if,choose

关键字元素:where,set,trim

循环元素:foreach

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>

choose元素

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

<select ..>

  SQL语句1

  <choose>

    <when test = "条件表达式">

    SQL语句2

    </when>

    <otherwise>

    SQL语句3

    </otherwise>

  </choose>

</select>

choose元素的使用示例为:

<select id = "findBySal" resultType = "Emp" parameterType = "Emp">

  select * from Emp where

  <choose>

    <when test = "sal>2000">

      SAL>=#{sal}

    </when>

    <otherwise>

      SAL>=2000

    </otherwise>

   </choose>

</select>

where元素

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

<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>

set元素

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

<update...>

  update表

  <set>

    动态追加更新字段

  </set>

</update>

set元素代码示例为:

<update id = "updateEmp"  parameterType = "Emp">

  update Emp

  <set>

    <if test = "ename != null">

      SAL = #{sal}

    </if>

    <if test = "comm != null">

      COMM = #{comm}

    </if>

    <if test = "deptno != null">

      DEPTNO = #{deptno}

    </if>

  </set>

  where EMPNO = #{empno}

</update>

trim元素

trim元素主要功能为:

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

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

正因为trim有这些功能,所以我们可以非常简单的利用trim代替where和set元素功能。

trim元素应用示例为:

<!-- 等价于where元素 -->

<trim prefix = "WHERE" prefixOverrides = "AND | OR">

....

</trim>

<!-- 等价于set元素 -->

<trim prefix = "SET" suffixOverrides = ",">

...

</trim>

foreach元素

foreach元素实现了循环逻辑,可以进行一个集合的迭代。主要用于在构建in条件中,foreach使用示例为:

<select ..>

  select字段 from 表 where 字段 in

  <foreach collection = "集合"  item = "迭代变量"  open = "(" separator = "," close = ")">

    #{迭代变量}

  </foreach>

</select>

foreach元素非常强大,它允许指定一个集合,声明集合项和索引变量,这些变量可以用在元素体内。它也允许指定开放和关闭的字符串,在迭代之间放置分隔符。

foreach元素代码示例为:

<select id = "findByDeptNos" resultyType = "Emp"  parameterType = "Emp">

  select * from Emp

  <if test = "deptnos != null">

    where DEPTNO in

    <foreach collection = "deptnos"  item = "dno"  open = "(" close = ")" separator = ",">

      #{dno}

    </foreach>

  </if>

</select>

时间: 2024-08-05 11:17:10

Mybatis框架之动态SQL书写方式小结的相关文章

Mybatis使用之动态SQL语句

Mybatis使用之动态SQL语句 一:简介 Mybatis动态SQL语句可帮助我们根据需要动态拼接SQL语句.主要在配置文件中使用<where> <if><choose><when><otherwise> <set> <trim><foreach>标签来实现. 二:具体使用方式 2.1 where 2.1.1 功能 语句的作用主要是简化SQL语句中where中的条件判断,where元素的作用是会在写入wher

Mybatis学习之动态sql语句(7)

Mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似. 3. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀) 4. where (主要是用来简化sql语句中where条件判断的,能智能的

MyBatis中的动态SQL

动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号.利用动态 SQL 这一特性可以彻底摆脱这种痛苦. 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形. 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处

mybatis学习之动态sql

mybatis的动态sql语句很强大,在mapper映射文件中使用简单的标签即可实现该效果,下面一个个记录: 1.select查询 简单的select类似如下: <select id="findById" resultMap="StudentResult" parameterType="Integer"> select * from t_student where id = #{id} </select> 1)if(常用于

mybatis 详解------动态SQL

目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,otherwise) 语句 5.动态SQL:trim 语句 6.动态SQL: SQL 片段 7.动态SQL: foreach 语句 8.总结 前面几篇博客我们通过实例讲解了用mybatis对一张表进行的CRUD操作,但是我们发现写的 SQL 语句都比较简单,如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ,稍微不

MyBatis进阶使用——动态SQL

MyBatis的强大特性之一就是它的动态SQL.如果你有使用JDBC或者其他类似框架的经验,你一定会体会到根据不同条件拼接SQL语句的痛苦.然而利用动态SQL这一特性可以彻底摆脱这一痛苦 MyBatis精简了元素种类,在MyBatis3中,我们只需要学习以下4种元素: if choose(when,otherwise) trim(where,set) foreach if 动态SQL通常要做的事情就是根据条件包含where子句的一部分,比如: <select id="findActiveB

mybatis入门基础----动态SQL

原文:http://www.cnblogs.com/selene/p/4613035.html 阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.2.案例需求 用户信息综合查询列表这个statement的定义使用动态sql,对查询条件进行判断,如果输入参数不为空才进行查询拼接. 1.3.UserMapper.xml 1 <!-- 用户信息综合查询

Mybatis学习笔记-动态SQL与模糊查询

需求:实现多条件查询用户(姓名模糊匹配, 年龄在指定的最小值到最大值之间) User.java实体类 public class User { private int id; private String name; private int age; //... } ConditionUser.java public class ConditionUser { private String name; private int minAge; private int maxAge; //... }

6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)

动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的拼接和组装.可以简单的说成Mybatis中可以动态去的判断需不需要某些东西. 动态Sql主要有以下类型: if choose,when,otherwise trim,where,set foreach 这里主要介绍几个常见的where  if  foreach,直接贴代码了 1.where 这里的where有一个好处就是在拼接成功的时候,会自动去掉第一个and 2.i