一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作;还通过一些条件选择语句让我们SQL的多条件、动态查询更加容易、简洁、直观。

mybatis中用于实现动态SQL的元素有:

if:用if实现条件的选择,用于定义where的子句的条件。

choose(when otherwise)相当于Java中的switch语句,通常when和otherwise一起使用。

where:简化SQL语句中的where条件。

set :解决SQL语句中更新语句

我们可以通过几个例子来看一下这几个元素的运用场景:

if:

<select id="queryEmp"  resultType="cn.test.entity.Emp">
          select * from emp where 1=1
          <if test="deptNo!=null">
          and deptno=#{deptNO}
          </if>
          <if test="deptName!=null">
          and deptno=#{deptName}
          </if>
          </select>

注:<if test="deptNo!=null">中 的deptNo是指实体类中的属性或字段;

choose:

<select id="queryEmp"  resultType="cn.test.entity.Emp">
          select * from emp where 1=1
          <choose>
          <when test="deptNo!=null">
          and deptno=#{deptNo}
          </when>
          <when test="deptName!=null">
          and deptname=#{deptName}
          </when>
          <otherwise>
          and personnum>#{personNum}
          </otherwise>
          </choose>
          </select>

注:上面也说了,choose相当于Java中的switch语句;当第一个when满足时;就只执行第一个when中的条件。当when中的条件都不满足时;就会执行默认的的;也就是otherwise中的语句。

where:

<select id="queryEmp"  resultType="cn.test.entity.Emp">
          select * from emp 
          <where>
          <if test="deptNo!=null">
          and deptno=#{deptNO}
          </if>
          <if test="deptName!=null">
          and deptno=#{deptName}
          </if>
          </where>
          </select>

注: where下面第一个if语句中以and开头,也可以省略第一个and ,如果第一个if语句中有and;mybatis会将第一个and忽略。

set:

<update id="updateEmp" parameterType="cn.test.entity.Emp" flushCache="true">
          update emp 
          <set>
          <if test="empName!=null">empname=#{empName},</if>
          <if test="job!=null">job=#{job}</if>
          </set>
          where empno=#{empNo}
          </update>

 

注:  在mybatis中的SQL语句结尾不能加“;”,这样会导致mybatis无法识别字符;导致SQL语句的语法错误;出现 java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符的错误。的异常。

MyBatis中动态SQL语句完成多条件查询的更多相关文章

  1. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  2. MyBatis(十一):Mybatis 动态SQL语句完成多条件查询

    之前文章中对in的用法做过讲解:<MyBatis(四):mybatis中使用in查询时的注意事项> 实际上对于多个参数的用法也是这是注意的: 多参&if判空&List集合判 ...

  3. 阶段3 1.Mybatis_08.动态SQL_03.mybatis中动态sql语句-foreach和sql标签

    foreach标签 in的查询 sql语句好写,但是传参在映射文件里面改怎么传呢 定义一个List<Integer>成员变量,然后生成get和set 定义一个新的查询方法 open:开始符 ...

  4. 阶段3 1.Mybatis_08.动态SQL_02.mybatis中动态sql语句-where标签的使用

    这里的userSex是实体类里面的属性名,而不是数据库内的字段名称 一个老王改成性别女,为了区分一下 增加sex字段的查询 where标签 用上where和刚才的执行效果是一样的 where标签使我们 ...

  5. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  6. mybatis 的动态sql语句是基于OGNL表达式的。

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  7. MyBatis中动态SQL元素的使用

    掌握MyBatis中动态SQL元素的使用 if choose(when,otherwise) trim where set foreach <SQL>和<include> 在应 ...

  8. MyBatis 中实现SQL语句中in的操作 (11)

    MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...

  9. 控制台输出 mybatis 中的sql语句

    控制台输出 mybatis 中的sql语句 在 log4j.xml 文件中 增加如下配置 <!-- mybatis 输出的sql,DEBUG级别 --> <logger name=& ...

随机推荐

  1. JProfiler连接weblogic

    转 http://blog.csdn.net/xu1314/article/details/7737236

  2. Django - Ajax分页

    目前总结了2种方法: 1. Ajax 分页 尼玛各种google,stackoverflow,搞了好久才总结出这个,之前使用Pagination tag loading的方式不好用,并且不能进行aja ...

  3. js抛物线

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Linux-压缩与解压缩命令

    常用的压缩格式:.zip   .gz   .bz2   .tar.gz   .tar.bz2 1.Zip 压缩文件:zip 压缩文件名  源文件 压缩目录:zip -r 压缩文件名 源文件 解压缩.z ...

  5. Project://CRM

    初始化 考勤 录入成绩 查看成绩 待续...

  6. UVALive - 5031 Graph and Queries (并查集+平衡树/线段树)

    给定一个图,支持三种操作: 1.删除一条边 2.查询与x结点相连的第k大的结点 3.修改x结点的权值 解法:离线倒序操作,平衡树or线段树维护连通块中的所有结点信息,加个合并操作就行了. 感觉线段树要 ...

  7. [Luogu3674]小清新人渣的本愿

    luogu 题意 给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  8. ecshop彻底去版权把信息修改成自己的全教程

    前台部分: 一.去掉头部title部分的ECSHOP演示站-Powered by ecshop 1.问题:“ECSHOP演示站”方法:在后台商店设置 – 商店标题修改2.问题:“ Powered by ...

  9. jq 侧边栏

    HTML 侧边栏HTML代码: <div class="sidebar" id="sucaihuo">     <div class=&quo ...

  10. Dos简单命令

    1.cmd命令进入某个目录,具体教程:http://blog.csdn.net/aidenliu/article/details/5390113 (注意的是:切换目录时不能直接cmd D:\Nancy ...