`

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

    Mybatis choose when语句的基本语法结构为:&lt;choose&gt;标签中包含一个或多个&lt;when&gt;标签和一个&lt;otherwise&gt;标签,用于指定不同的条件和对应的SQL语句。例如: ```xml &lt;choose&gt; &lt;when test="cityId == '00' "&gt; &lt;!-- ...

    mybatis 动态sql及参数传递

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

    mybatis-3-mybatis-3.2.6

    12. **动态SQL**:MyBatis提供了强大的动态SQL功能,允许在XML映射文件中直接编写条件语句,如if、choose、when、otherwise等。 13. **缓存**:MyBatis支持本地缓存和二级缓存,可以提高数据读取速度,减少数据库...

    mybatisx.zip

    4. **动态SQL助手**:支持自动生成动态SQL的if、choose、when、otherwise等标签,使动态SQL的编写变得简单直观。 5. **条件查询构建**:插件能帮助构建复杂的条件查询,通过简单的拖拽操作即可生成对应的XML片段,...

    MyBatis 官方笔记 + MyBatis 3.5.10 官方英文文档

    - **动态 SQL**:通过 `&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;foreach&gt;` 等标签实现 SQL 语句的动态生成。 - **结果映射(ResultMap)**:用于复杂对象的映射,处理一对一、一对多、多对多等关系。 4. ...

    mybatis之动态SQL

    在 XML 映射文件中,我们可以使用 `&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;foreach&gt;` 等标签来构建动态 SQL。这些标签可以让我们根据不同的条件拼接 SQL 语句,使得 SQL 更加灵活且易于管理。 ...

    idea插件MybatisX-1.6.1

    对于MyBatis的动态SQL块(如if、choose、when、otherwise等),MybatisX提供了一键生成功能,可以快速插入常用的动态标签,加快开发速度。 4. Mapper XML导航: MybatisX可以快速定位Mapper XML文件中的方法,...

    MyBatis动态拼接SQL

    MyBatis通过`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等标签来实现动态SQL的构建。 1. `&lt;if&gt;`标签:用于判断某个条件是否成立,如果成立则插入相应的SQL片段。例如,当查询...

    MyBatis 中文官方文档

    MyBatis 提供了强大的映射元素,如`&lt;resultMap&gt;`用于定义结果集映射,`&lt;association&gt;`和`&lt;collection&gt;`用于处理复杂对象关系,以及`&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`等结构,实现类似Java的if-else逻辑。...

    MyBatis3 API 中文文档

    - if、choose、when、otherwise:根据不同的条件判断,动态地加入SQL片段。 - trim、where、set:动态地处理SQL语句的前后缀。 - foreach:用于处理遍历集合或数组,并动态地加入SQL片段。 8. Java API MyBatis还...

    MyBatis基本使用总结

    通过`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;`等标签,可以在映射文件中编写条件语句、循环语句等,使SQL更具灵活性和可扩展性。 七、缓存机制 MyBatis内置了本地缓存和二级...

    MyBatisDemo

    例如,使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签进行条件判断,使得一个映射文件可以处理多种不同的查询场景。 事务管理是MyBatis中的另一个关键点。在MyBatis中,你可以手动管理事务,或者配置`...

    Mybatis文档(中英)

    Mybatis的动态SQL功能非常强大,可以在映射文件中使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`&lt;set&gt;`等标签来构建条件语句,使得SQL语句可以根据实际参数动态生成。 6. **Executor执行器** ...

    Mybatis最新版

    2. 动态SQL:Mybatis支持动态SQL,允许在XML映射文件中使用条件语句,例如`if`, `choose`, `when`, `otherwise`, `where`, `trim`, `foreach`等标签,这些可以方便地根据业务需求构建灵活的查询条件。 3. 参数映射...

    mybatis-3.5.9 源码(mybatis-3-mybatis-3.5.9.zip)

    - MyBatis 的强大之处在于其支持动态 SQL,通过 if、choose、when、otherwise、foreach 等标签,可以在 XML 映射文件中编写复杂的条件判断和循环。 8. **缓存机制** - MyBatis 提供了本地缓存(Local Cache)和二...

    mybatis-3.5.7.zip

    3. **动态SQL**:MyBatis的动态SQL功能强大,可以在XML映射文件中使用if、choose、when、otherwise等元素编写灵活的条件查询。 4. **缓存机制**:MyBatis内置了两级缓存,一级缓存是SqlSession级别的,二级缓存则是...

    MyBatis 中文注释源码

    - MyBatis 提供了强大的动态 SQL 功能,如 `&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;set&gt;`, `&lt;foreach&gt;` 等标签,可以动态地生成 SQL 语句。 5. **参数映射与结果映射**: - `&lt;parameterMap&gt;`...

    mybatis_test09_mybatis_Mine!_

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

    mybatis 框架和一些mybatis的依赖jar包

    4. **动态SQL**:MyBatis的动态SQL功能非常强大,允许在XML映射文件中使用条件语句、if、choose、when、otherwise等标签实现SQL的动态拼接,这极大地提高了SQL的灵活性。 5. **依赖管理**:在描述中提到的mybatis-...

    mybatis-3.2.2版本的jar包和源码

    例如,可以使用if、choose、when、otherwise等元素来实现条件判断,减少代码重复。 此外,MyBatis的参数映射和结果映射功能简化了数据访问层的工作。通过@Param和@ResultMap注解,可以自动将方法参数映射到SQL语句...

Global site tag (gtag.js) - Google Analytics