MyException - 我的异常网
当前位置:我的异常网» SQL » Mybatis框架之动态SQL书写模式小结

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

www.MyException.Cn  网友分享于:2013-10-16  浏览:0次
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>

文章评论

10个调试和排错的小建议
10个调试和排错的小建议
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
鲜为人知的编程真相
鲜为人知的编程真相
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
漫画:程序员的工作
漫画:程序员的工作
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
中美印日四国程序员比较
中美印日四国程序员比较
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
我是如何打败拖延症的
我是如何打败拖延症的
编程语言是女人
编程语言是女人
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
老程序员的下场
老程序员的下场
那些争议最大的编程观点
那些争议最大的编程观点
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
一个程序员的时间管理
一个程序员的时间管理
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
 程序员的样子
程序员的样子
如何成为一名黑客
如何成为一名黑客
Java程序员必看电影
Java程序员必看电影
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
旅行,写作,编程
旅行,写作,编程
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
为什么程序员都是夜猫子
为什么程序员都是夜猫子
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员都该阅读的书
程序员都该阅读的书
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
每天工作4小时的程序员
每天工作4小时的程序员
程序员必看的十大电影
程序员必看的十大电影
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有