`

Mybatis_choose_when

阅读更多

choose (when, otherwise)标签

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件。MyBatis 提供了 choose 元素。if标签是与(and)的关系,而 choose 是或(or)的关系。

choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

例如下面例子,同样把所有可以限制的条件都写上,方面使用。choose会从上到下选择一个when标签的test为true的sql执行。安全考虑,我们使用where将choose包起来,放置关键字多于错误。

 

via: http://www.yiibai.com/mybatis/mybatis_choose.html

<!--  choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 -->  
<select id="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User">  
    SELECT *  
      FROM User u   
    <where>  
        <choose>  
            <when test="username !=null ">  
                u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')  
            </when >  
            <when test="sex != null and sex != '' ">  
                AND u.sex = #{sex, jdbcType=INTEGER}  
            </when >  
            <when test="birthday != null ">  
                AND u.birthday = #{birthday, jdbcType=DATE}  
            </when >  
            <otherwise>  
            </otherwise>  
        </choose>  
    </where>    
</select>  

choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中 的 choose 很类似。

<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">
        select * from t_blog where 1 = 1 
        <choose>
            <when test="title != null">
                and title = #{title}
            </when>
            <when test="content != null">
                and content = #{content}
            </when>
            <otherwise>
                and owner = "owner1"
            </otherwise>
        </choose>
    </select>

when元素表示当 when 中的条件满足的时候就输出其中的内容,跟 JAVA 中的 switch 效果差不多的是按照条件的顺序,当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出 otherwise 中的内容。所以上述语句的意思非常简单, 当 title!=null 的时候就输出 and titlte = #{title},不再往下判断条件,当title为空且 content!=null 的时候就输出 and content = #{content},当所有条件都不满足的时候就输出 otherwise 中的内容。

分享到:
评论

相关推荐

    mybatis_test09_mybatis_Mine!_

    MyBatis还支持动态SQL,这使得在XML映射文件中可以编写条件语句,比如IF、WHERE、choose(when/otherwise)、trim(where/sets/foreach)等元素,极大地提高了SQL的灵活性。 此外,MyBatis的注解方式也是常用的一种...

    MyBatis_3_User_Guide.zip_mybatis_mybatis api

    4. **动态SQL**:MyBatis的强项之一是动态SQL,可以在XML映射文件或注解中使用if、choose、when、otherwise、where、trim、foreach等标签来构建灵活的SQL语句。 5. **参数映射**:MyBatis支持简单的Map、POJO...

    SQL.rar_MyBatis3DynamicSql_dynamic mybatis_mybatis_mybatis Dyna

    2. `&lt;choose&gt;`(或`&lt;when&gt;`、`&lt;otherwise&gt;`)标签:类似于Java中的switch语句,根据不同的条件执行不同的SQL片段。 3. `&lt;where&gt;`标签:用于构建WHERE子句,会自动处理首部的AND或OR,并去除多余的AND。 4. `&lt;trim&gt;`...

    MyBatis_3_User_Guide_Simplified_Chinese.pdf

    - **动态SQL标签**:支持多种条件判断和循环操作,如`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;trim&gt;`, `&lt;where&gt;`, `&lt;set&gt;`和`&lt;foreach&gt;`等。 - **用途**:使得SQL语句更加灵活多变,可以根据不同情况动态...

    MyBatis1_areavcc_mybatis_

    8. **动态SQL**:通过if、choose、when、otherwise等标签,可以编写出根据条件变化的SQL语句。 9. **一对一、一对多、多对多关系映射**:MyBatis支持复杂的数据关联查询,如联合主键、外键等。 10. **MyBatis Plus...

    mybatis基本配置及例子.zip_mybatis_mybatis sql server_mybatis 实例_mybati

    MyBatis的动态SQL功能强大,允许在XML映射文件中使用条件语句,如`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;trim&gt;`, `&lt;foreach&gt;`等,使得SQL语句可以根据条件动态生成,提高了代码的可读性和可...

    Mybatis_ALL_One.rar

    这通常涉及到`if`、`choose`(when/otherwise)、`trim`、`where`、`foreach`等元素的使用。 4. **结果映射(ResultMap)**:结果映射是Mybatis处理查询结果的重要部分,它定义了如何将数据库查询的结果映射到Java...

    Mybatis_test.zip

    例如,我们可以创建一个Mapper接口,定义一个查询方法,然后在对应的XML映射文件中编写SQL语句,通过`&lt;select&gt;`标签定义查询,使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`等标签实现条件判断。 在Java代码中,我们需要使用...

    myBatis_Cache_Dynamic.rar

    MyBatis提供了多种动态元素,如`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等,使得SQL语句可以根据实际情况灵活生成。例如,使用`&lt;if&gt;`元素可以判断条件是否成立,只有满足条件...

    Mybatis资料_mybatis_

    2. **动态SQL**:Mybatis支持动态SQL,通过`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等标签,可以根据条件动态生成SQL,避免了大量字符串拼接的繁琐工作。 3. **注解方式**:...

    day06_mybatis_xml_duobiao.zip

    通过 `&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;` 等标签,可以在 XML 映射文件中根据条件构建 SQL。例如,我们可以根据参数来决定是否添加 `WHERE` 子句: ```xml SELECT * FROM user != null"&gt; AND name ...

    mybatis_demo1

    10. **动态 SQL**:MyBatis 提供了 `&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;foreach&gt;` 等标签,使得在 XML 映射文件中编写动态 SQL 成为可能,极大地提高了 SQL 语句的灵活性。 在"Mybatis_...

    mybatis_my.zip

    3. **动态SQL示例**:展示如何使用MyBatis的动态SQL特性,如if、choose、when、otherwise等元素。 4. **结果映射与关联查询**:解释如何处理复杂的结果集,如联合查询、子查询和自定义映射。 5. **事务管理**:...

    mybatis_maven学习笔记

    MyBatis的动态SQL功能允许我们在XML映射文件中使用条件语句,如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`和`&lt;where&gt;`等标签,根据传入的参数动态地生成SQL,提高了代码的灵活性。 6. **MyBatis的缓存机制** ...

    mybatis_xml关联插件

    此外,Mybatis还支持动态SQL,允许在XML映射文件中编写条件语句,如`if`、`choose`(`when`、`otherwise`)、`trim`、`where`等,大大提高了SQL的灵活性。在Eclipse中,你可以利用插件的代码提示和自动完成功能来...

    mybatis_demo

    8. **动态SQL**:在XML映射文件中,可以使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签实现条件判断,构建动态SQL,提高代码复用性。 9. **缓存机制**:MyBatis内置了一级缓存和二级缓存,可以提高数据...

    web6_mybatis_ALL.zip

    5. **动态SQL**:MyBatis允许在XML映射文件中编写动态SQL,使用`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;trim&gt;`等标签,根据条件动态生成SQL语句。 接下来,我们讨论一对一和一对多的关联查询:...

    学习mybatis_plus的基础使用.rar

    7. **动态SQL**:Mybatis Plus提供了一些内置的方法,如`if()`,`choose()`,`when()`,`otherwise()`,`trim()`,`where()`,`set()`等,它们可以实现动态SQL的构建。 8. **分页插件**:Mybatis Plus内置了Page对象和...

    MyBatis_3用户指南

    这部分讲述了如何使用if、choose、when、otherwise、trim、where、set、foreach等元素来构建动态SQL。 用户指南还提到了一些关于MyBatis使用的高级特性: - 构造方法:MyBatis允许在结果映射中使用构造方法,将...

    mybatis代码(9-16全天)_stemso65_mybatis_

    MyBatis的动态SQL功能强大,可以在映射文件中使用`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`等标签编写条件语句,灵活构建动态SQL,避免硬编码SQL字符串。 4. **参数映射与结果映射** 在...

Global site tag (gtag.js) - Google Analytics