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还支持动态SQL,这使得在XML映射文件中可以编写条件语句,比如IF、WHERE、choose(when/otherwise)、trim(where/sets/foreach)等元素,极大地提高了SQL的灵活性。 此外,MyBatis的注解方式也是常用的一种...
4. **动态SQL**:MyBatis的强项之一是动态SQL,可以在XML映射文件或注解中使用if、choose、when、otherwise、where、trim、foreach等标签来构建灵活的SQL语句。 5. **参数映射**:MyBatis支持简单的Map、POJO...
2. `<choose>`(或`<when>`、`<otherwise>`)标签:类似于Java中的switch语句,根据不同的条件执行不同的SQL片段。 3. `<where>`标签:用于构建WHERE子句,会自动处理首部的AND或OR,并去除多余的AND。 4. `<trim>`...
- **动态SQL标签**:支持多种条件判断和循环操作,如`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<trim>`, `<where>`, `<set>`和`<foreach>`等。 - **用途**:使得SQL语句更加灵活多变,可以根据不同情况动态...
8. **动态SQL**:通过if、choose、when、otherwise等标签,可以编写出根据条件变化的SQL语句。 9. **一对一、一对多、多对多关系映射**:MyBatis支持复杂的数据关联查询,如联合主键、外键等。 10. **MyBatis Plus...
MyBatis的动态SQL功能强大,允许在XML映射文件中使用条件语句,如`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<trim>`, `<foreach>`等,使得SQL语句可以根据条件动态生成,提高了代码的可读性和可...
这通常涉及到`if`、`choose`(when/otherwise)、`trim`、`where`、`foreach`等元素的使用。 4. **结果映射(ResultMap)**:结果映射是Mybatis处理查询结果的重要部分,它定义了如何将数据库查询的结果映射到Java...
例如,我们可以创建一个Mapper接口,定义一个查询方法,然后在对应的XML映射文件中编写SQL语句,通过`<select>`标签定义查询,使用`<if>`、`<choose>`、`<when>`等标签实现条件判断。 在Java代码中,我们需要使用...
MyBatis提供了多种动态元素,如`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等,使得SQL语句可以根据实际情况灵活生成。例如,使用`<if>`元素可以判断条件是否成立,只有满足条件...
2. **动态SQL**:Mybatis支持动态SQL,通过`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等标签,可以根据条件动态生成SQL,避免了大量字符串拼接的繁琐工作。 3. **注解方式**:...
通过 `<if>`、`<choose>`、`<when>`、`<otherwise>` 等标签,可以在 XML 映射文件中根据条件构建 SQL。例如,我们可以根据参数来决定是否添加 `WHERE` 子句: ```xml SELECT * FROM user != null"> AND name ...
10. **动态 SQL**:MyBatis 提供了 `<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<foreach>` 等标签,使得在 XML 映射文件中编写动态 SQL 成为可能,极大地提高了 SQL 语句的灵活性。 在"Mybatis_...
3. **动态SQL示例**:展示如何使用MyBatis的动态SQL特性,如if、choose、when、otherwise等元素。 4. **结果映射与关联查询**:解释如何处理复杂的结果集,如联合查询、子查询和自定义映射。 5. **事务管理**:...
MyBatis的动态SQL功能允许我们在XML映射文件中使用条件语句,如`<if>`、`<choose>`、`<when>`、`<otherwise>`和`<where>`等标签,根据传入的参数动态地生成SQL,提高了代码的灵活性。 6. **MyBatis的缓存机制** ...
此外,Mybatis还支持动态SQL,允许在XML映射文件中编写条件语句,如`if`、`choose`(`when`、`otherwise`)、`trim`、`where`等,大大提高了SQL的灵活性。在Eclipse中,你可以利用插件的代码提示和自动完成功能来...
8. **动态SQL**:在XML映射文件中,可以使用`<if>`、`<choose>`、`<when>`、`<otherwise>`等标签实现条件判断,构建动态SQL,提高代码复用性。 9. **缓存机制**:MyBatis内置了一级缓存和二级缓存,可以提高数据...
5. **动态SQL**:MyBatis允许在XML映射文件中编写动态SQL,使用`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<trim>`等标签,根据条件动态生成SQL语句。 接下来,我们讨论一对一和一对多的关联查询:...
7. **动态SQL**:Mybatis Plus提供了一些内置的方法,如`if()`,`choose()`,`when()`,`otherwise()`,`trim()`,`where()`,`set()`等,它们可以实现动态SQL的构建。 8. **分页插件**:Mybatis Plus内置了Page对象和...
MyBatis的动态SQL功能强大,可以在映射文件中使用`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`等标签编写条件语句,灵活构建动态SQL,避免硬编码SQL字符串。 4. **参数映射与结果映射** 在...
MyBatis的动态SQL功能非常强大,可以在XML映射文件中使用if、choose、when、otherwise、where、trim、foreach等标签,实现灵活的SQL拼接。例如,可以根据条件动态添加WHERE子句,或遍历集合生成IN条件等。 ...