文档章节

MyBatis运用心得(3)

zhuzhuguang
 zhuzhuguang
发布于 2014/09/16 08:19
字数 451
阅读 20
收藏 0

2.Dynamic SQL
  动态sql是MyBaits的优点之一,在以往的IBatis就有动态sql,在此只是简要概述
  在MyBatis中,sql的定义基于2中方式,一种是传统的XML文件,一种是Java的Mapper类生成
  1)基于Mapper的动态SQL:
    此部分在"MyBatis运用心得(2)"中已经叙述,主要是利用SelectBuilder和SqlBuilder,还是十分容易理解的。

  2)基于XML文件的动态SQL:
    主要是利用一些标签:<if>,<where>,<when>,<choose>,<otherwise>,<set>,<trim>,<foreach>
    这些标签有一些与jstl比较相近,如<when>,<choose>,<otherwise>,<if>,<foreach>等。
    <where>的作用主要是在一个where语句中如果有多个<if>,有可能会多出and和or连接符,如:

where
<if test="name != null">
    name = #{name}
</if>
<if test="id != null">
    and id = #{id}
</if>


     当name为null,id不为null时,sql为where and id = ?,出现错误。写成

<where>
    <if test="name != null">
        name = #{name}
    </if>
    <if test="id != null">
        and id = #{id}
    </if>
</where>


    如果where后面第一个字符串时and或or,将会跳过

    <set>的意思和where差不多,是实现update功能时一次set多个域

update A
<set>
    <if test="name != null">
        name = #{name},
    </if>
    <if test="id != null">
        id= #{id}
    </if>
</set>



    在此需要说明的是<if>,<when>标签只能做一些基本的条件判断,如"=",">","<",但如果要进行复杂条件判断,比如调用一个Java对象的方法,则显得力不从心,如果是基于Mapper的sql实现,SelectBuilder可以做的很好,但如果基于XML,就要求助于强大的表达式工具: ognl
    比如现有一个OgnlHelper类,其中有一个判断是否有特殊字符的static方法hasSpecialChar,则可以通过ognl表示给出

<where>
    <choose>
        <when test="@com.test.OgnlHelper@hasSpecialChar(name)">
            and name like '%'||#{name}||'%' escape '\'
        </when>
        <otherwise>
            and name like '%'||#{name}||'%'
        </otherwise>
    </choose>
</where>

© 著作权归作者所有

zhuzhuguang
粉丝 3
博文 24
码字总数 6185
作品 0
朝阳
程序员
私信 提问
springMVC+mybatis+mysql学习心得

MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。 MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。 MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、...

magelee
2015/07/14
1K
1
MyBatis使用心得(一)--- 简单介绍

Mybatis的前身是iBatis,iBatis原本就是apache的一个开源项目,2010年该项目有apache迁移到了google code,并改名为MyBatis。 1. 简介 MyBatis支持普通SQL查询,存储过程和高级映射的优秀持久...

半夏alvin
2014/04/21
1K
0
高手问答第 165 期 —— 资深 Java 工程师带你解读 MyBatis

OSCHINA 本期高手问答(2017 年 8 月 9 日 — 8 月 15 日)我们请来了@Liuzh_533 刘增辉为大家解答关于 MyBatis 方面的问题。 刘增辉,资深 Java 工程师,热爱技术研究,乐于分享心得,活跃于...

局长
2017/08/08
9.2K
71
SpringBoot整合mybatis的mybatis-spring的配置方式

我大概是15年初的时候,接触了SpringBoot,不过只开发了一个小项目,就没再使用过。时隔两年,SpringBoot变的热火朝天,我也不得不认真学习一下了,以下个人心得,愿对新手有所帮助。 Spring...

攻城狮-飞牛
2018/01/05
6.3K
16
MyBatis的动态SQL详解

MyBatis的动态SQL是根据OGNL表达式的,号码大全它能够协助咱们方便的在SQL句子关键词挖掘工具中完成某些逻辑。 MyBatis中用于完成动态SQL的元素首要有: if choose(when,otherwise) trim...

haomad
2014/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MVC Linux下开发及部署

linux使用的是 Ubuntu 64 位 18.04.2 LTS 首先复制C:\Program Files (x86)\Embarcadero\Studio\20.0\PAServer 下 LinuxPAServer20.0.tar.gz 到 linux 目录下 运行链接编译程序 delphi环境配置......

苏兴迎
今天
9
0
3.控件及其属性

1.文本 2.按钮

横着走的螃蟹
今天
7
0
安装Genymotion模拟器慢的解决方案

第一步点击下载, C:\Users\Administrator\AppData\Local\Genymobile\genymotion.log 中搜索 ova 会发现这个文件 使用迅雷下载即可. 在 虚拟机中导入这个.ova 文件 即可安装...

chenhongjiang
今天
5
0
4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

你好,我是彤哥,本篇是netty系列的第四篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的N...

彤哥读源码
今天
7
0
如何把握好面试的最后一问 ?

如何把握好面试的最后一问 ? 你有没有听过这句话 “ 你还有什么问题想问我的吗? ” 如何把握好面试的最后一问 ? 要积极稳妥,切莫减分、丢分、扣分。比如,你提问的问题很傻很天真,比如你提...

编程三分钟
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部