zoukankan      html  css  js  c++  java
  • MyBatis中动态SQL语句完成多条件查询

    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>

    in:

    <select id="dynamicForeachTest" resultType="Blog">  

    select * from t_blog where id in  

         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">  

                #{item}  

            </foreach>  

    </select>

    测试代码:

    1. @Test  
    2. public void dynamicForeachTest() {  
    3. SqlSession session = Util.getSqlSessionFactory().openSession();  
    4. BlogMapper blogMapper = session.getMapper(BlogMapper.class);  
    5. List<Integer> ids = new ArrayList<Integer>();  
    6. ids.add(1);  
    7. ids.add(3);  
    8. ids.add(6);  
    9. List<Blog> blogs = blogMapper.dynamicForeachTest(ids);  
    10. for (Blog blog : blogs)  
    11. System.out.println(blog);  
    12. session.close();  
    13. }   

     

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

  • 相关阅读:
    JSTL基础知识
    EL表达式基础知识
    Log4Net使用详解
    ViewState存储到服务器
    WCF通信过程
    值类型与引用类型总结
    使用 HttpWebRequest 发送模拟 POST 请求
    OOP组合和继续的优缺点
    XPath在asp.net中查询XML
    Equal 和==比较
  • 原文地址:https://www.cnblogs.com/jbml-154312/p/7799002.html
Copyright © 2011-2022 走看看