Mybatis中动态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: 无效字符的错误。的异常。

动态SQL语句***

1)<if> 习惯按null来判断

2)where a. WHERE 1=1 b<where>去掉开头的and或者or

3)set,去掉最后的逗号,没有就不管

4)foreach 遍历,collection数组类型,item当前循环的实例,open开头的字符串,close结尾的字符串,separator分隔符。最常用用在in子查询串

<foreach collection="array" item="id" open="(" close=")" separator=",">

Mybatis中动态SQL多条件查询的更多相关文章

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

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

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

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

  3. MyBatis中动态SQL语句完成多条件查询

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

  4. mybatis之动态SQL操作之查询

    1)  查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL /** * 持久层 * @author AdminTC */ public class StudentDao { /** * ...

  5. mybatis的动态sql及模糊查询

    1.动态sql 使用类似于jstl表达式来实现 2.模糊查找 用一个对象来封装条件 步骤: 1)新建一个条件实体 package com.hy.mybatis.entity; public class ...

  6. mybatis中动态SQL之trim详解

    一. 背景 之前mybatis中<where>.<update>.<if>.<foreach>标签用的多,知道有<trim>这个标签,但很少 ...

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

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

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

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

  9. mybatis中的.xml文件总结——mybatis的动态sql

    resultMap resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功. 如果sql查询字段名和pojo的属性名不一致,可以通过re ...

随机推荐

  1. 【JBPM4】创建流程实例

    示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); ExecutionService executionServ ...

  2. lvm笔记

    安装LVMyum -y install lvm* 创建PV# pvcreate /dev/md5 /dev/sdf1 /dev/sdg 查看PV# pvdisplay 还可以使用命令pvs 和pvsc ...

  3. Template Mode 'HTML5' is deprecated与UnsatisfiedDependencyException

    org.thymeleaf.templatemode.TemplateMode : [THYMELEAF][main] Template Mode 'HTML5' is deprecated. Usi ...

  4. SpringBoot学习:在Interillj Idea上快速搭建SpringBoot项目

    一.创建SpringBoot项目 二.导入Jar包(pom.xml) <?xml version="1.0" encoding="UTF-8"?> ...

  5. VS Code开发技巧集锦

    2016 年 9 月 23-24 日,由 CSDN 和创新工场联合主办的“MDCC 2016 移动开发者大会? 中国”(Mobile Developer Conference China)将在北京? ...

  6. python selenium firefox 添加cookie add_cookie

    from selenium import webdriver driver = webdriver.Firefox() driver.get('http://www.baidu.com') cooki ...

  7. CSS3主要的几个样式笔记

    1.边框:border-color:    设置对象边框的颜色.     使用CSS3的border-radius属性,如果你设置了border的宽度是X px,那么你就可以在这个border上使用X ...

  8. servlet 的控制缓存时间和response的重定向

    //控制缓存时间 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletE ...

  9. python学习第一天_环境的搭建

    Python linux环境的安装: 1.https://www.python.org/ftp/python/ 大家可以在这里下载自己所需的linux下的版本 ,这里我下载的2.6.6版本: 2.在C ...

  10. Crontab 在linux中的非常有用的Schedule Jobs

    crontab 是linux系统集成的定时任务命令,它对于系统运行(数据的备份,调度系统资源或命令,程序的定时触发等非常有用).crontab有些类似于Windows系统的Service的任务计划程序 ...