zoukankan      html  css  js  c++  java
  • Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询

    mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件。

    choosewhen otherwise)相当于Java中的switch语句,通常whenotherwise一起使用。

    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语句中有andmybatis会将第一个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来判断

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

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

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

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

  • 相关阅读:
    sock编程
    Exceptional c++
    sort
    实现UDP高效接收/响应
    Iterator invalidation(迭代器失效)
    php 判断一个点是否在一个多边形区域内
    PHP 如何在txt里查找包含某个字符串的那一行?
    php 实现栈与队列
    微信支付 接口
    文章添加,删除,修改,分页列表
  • 原文地址:https://www.cnblogs.com/Gandy/p/7529998.html
Copyright © 2011-2022 走看看