`

mybatis choose when otherwise

阅读更多

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

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

 

<!--  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>

第二种形式:
代码 
  1. <!--  choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 -->    
  2. <select id="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User">    
  3.     SELECT *    
  4.       FROM User u       
  5.         <choose>    
  6.             <when test="username !=null ">    
  7.              where   u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')    
  8.             </when >    
  9.             <when test="sex != null and sex != '' ">    
  10.              where   AND u.sex = #{sex, jdbcType=INTEGER}    
  11.             </when >    
  12.             <when test="birthday != null ">    
  13.              where   AND u.birthday = #{birthday, jdbcType=DATE}    
  14.             </when >    
  15.             <otherwise>
  16.              where  1=1
  17.             </otherwise>    
  18.         </choose>          
  19. </select>  
代码
批量
<if test="parentIdMap !=null">
	and parentId in
         <foreach collection="parentIdMap" item="parentIds"
            index="index" open="(" close=")" separator=",">
            #{parentIds}
        </foreach>
</if>
 
分享到:
评论

相关推荐

    mybatis 动态sql及参数传递

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

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

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

    springmybatis

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

    MyBatis 动态 SQL 示例

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

    MyBatis 动态SQL示例

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

    mybatis课件.rar

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

    关于mybatis的一些相关资源

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

    mybatis思维导图总结.zip

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

    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.pdf

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

    mybatis动态sql的一些相关资源

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

    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中文指南,MyBatis中文帮助文档

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics