`

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 choose when用法实例代码

    本文通过实例代码给大家介绍了Mybatis choose when用法,需要的的朋友参考下吧

    MyBatis3_用户指南(附JavaDB实例)

    choose, when, otherwise元素47 trim, where, set元素.... 48 Foreach元素..... 50 Java API....... 52 目录结构....52 SqlSessions...... 53 SqlSessionFactoryBuilder.. 53 SqlSessionFactory55 SqlSession.....57...

    mybatis 动态sql及参数传递

    choose、when、otherwise 标签 set标签 trim标签 forEach标签 参数传递 单个参数传递 多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们往往需要编写复杂的SQL语句,...

    springmybatis

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...

    Mybatis由浅入深 - 03动态SQL 源码

    这是Mybatis由浅入深的第3节源码。 动态SQL是Mybatis的亮点功能之一,解决了根据不同条件拼接SQL的繁琐痛苦问题,避免了java代码和sql混在一起,是非常...2. choose (when, otherwise) 3. trim(where, set) 4. foreach

    MyBatis 动态 SQL 示例

    MyBatis 动态 SQL 通过使用 、&lt;choose&gt;、&lt;when&gt;、、、&lt;set&gt; 等标签来实现。以下是一些常见的动态 SQL 标签及其用法,通过组合使用这些标签,可以编写出非常灵活和强大的 SQL 语句,以适应不同的查询和更新需求。

    MyBatis 动态SQL示例

    MyBatis 动态 SQL 通过使用 、&lt;choose&gt;、&lt;when&gt;、、、&lt;set&gt; 等标签来实现。附件是一些常见的动态 SQL 标签及其用法,通过组合使用这些标签,可以编写出非常灵活和强大的 SQL 语句,以适应不同的查询和更新需求。

    mybatis课件.rar

    使用、&lt;choose&gt;、&lt;when&gt;、、、等元素构建动态SQL。 动态SQL的应用场景和实例。 6. 注解配置: 使用注解代替XML映射器文件。 常用的注解如@Select、@Insert、@Update、@Delete。 7. 一级缓存与二级缓存: 一级缓存...

    关于mybatis的一些相关资源

    MyBatis的动态SQL主要通过XML标签来实现,这些标签包括、&lt;choose&gt;、&lt;when&gt;、、、、等。这些标签可以单独使用,也可以组合使用,以构建复杂的动态SQL逻辑。例如,使用标签可以根据某个条件的真假来决定是否包含某个...

    MyBatis中文指南,MyBatis中文帮助文档

    什么是MyBatis?............................................................................................................. 5 入门........................................................................

    mybatis思维导图总结.zip

    使用 、&lt;choose&gt;、&lt;when&gt;、&lt;otherwise&gt; 构建动态 SQL。 动态 SQL 的应用场景和语法示例。 5. 注解配置 使用注解替代映射器文件。 常用注解:@Select、@Insert、@Update、@Delete。 6. 一级缓存与二级缓存 一级缓存...

    MyBatis动态SQL.pdf

    它允许开发者在XML映射文件中定义SQL模板,并通过预定义的标签如、&lt;choose&gt;、&lt;when&gt;和等,根据传入的参数动态地生成SQL语句。这样,同一个SQL映射文件就可以处理多种不同的业务场景,极大地提高了代码的复用性和可...

    mybatis动态sql.doc

    在 MyBatis 中,可以使用 `&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;` 等标签来实现动态 SQL。以下是一个简单的示例: ```xml SELECT * FROM user != null and username != ''"&gt; AND username = #{username...

    MyBatis-3-User-Guide用户手册(中文英文)

    choose, when, otherwise \ 40 trim, where, set \ 41 foreach \ 43 Java API \ 44 应用目录结构\ 44 SqlSessions \ 45 SqlSessionFactoryBuilder \ 45 SqlSessionFactory\ 47 SqlSession \ 48 ...

    mybatis动态sql的一些相关资源

    MyBatis提供了多种元素来实现动态SQL,如、&lt;choose&gt;、&lt;when&gt;、、、、等。这些元素可以单独使用,也可以组合使用,以实现复杂的动态SQL逻辑。例如,标签可以根据条件判断是否包含某个SQL片段,&lt;choose&gt;、&lt;when&gt;、则...

    MyBatis动态SQL是一种强大的特性.docx

    MyBatis提供了多种元素来实现动态SQL,如、&lt;choose&gt;、&lt;when&gt;、、、、等。这些元素可以单独使用,也可以组合使用,以实现复杂的动态SQL逻辑。例如,我们可以使用标签来判断某个条件是否成立,从而决定是否添加某个SQL...

    mybatis动态sql

    MyBatis 提供了强大的动态 SQL 功能,它允许你根据参数的值来动态地构建...&lt;choose&gt;, &lt;when&gt;, &lt;otherwise&gt;:类似于 Java 中的 switch-case-default 结构。 xml &lt;select id="findUsersByType" resultType="User"&gt; SEL

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    MyBatis提供了多种元素来实现动态SQL,如、&lt;choose&gt;、&lt;when&gt;、、、、等。这些元素可以单独使用,也可以组合使用,以实现复杂的动态SQL逻辑。例如,我们可以使用标签来判断某个条件是否成立,从而决定是否添加某个SQL...

    MyBatis动态SQL是一项强大的特性,它允许我们在编写SQL语句时根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的

    其中,最常用的标签包括、&lt;choose&gt;、&lt;when&gt;、、、、等。这些标签可以单独使用,也可以组合使用,以实现复杂的动态SQL逻辑。例如,我们可以使用标签来判断某个条件是否满足,然后决定是否添加某个SQL片段;或者使用...

Global site tag (gtag.js) - Google Analytics