【MyBatis】进一步理解choose、when、otherwise标签

简介: 【MyBatis】进一步理解choose、when、otherwise标签

choose、when、otherwise

choose里面包含when、otherwise两个标签,choose是父标签,when和otherwise必须都要写在它里面


当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出


当所有的条件都不满足的时候就输出 otherwise 中的内容。第一个when不满足则继续往下判断,直到满足为止,如果全不满足,则执行otherwise(相当于else)


when

相当于else if,至少有一个

当 when 中的条件满足的时候就输出其中的内容

和java 中的 switch 中的case效果差不多,但是和case还是有差别的(这里是直到寻找到满足条件的值为止or全不满足)

当第一个条件满足时,下面的都会执行

otherwise

when元素表示当 when 中的条件满足的时候就输出其中的内容,


相当于else,最多有一个

当所有的我很条件都不满足的时候就输出 otherwise 中的内容(可以不写)


不需要加and,第一个条件满足下面都不用判断了


这里员工姓名成立的话,其它下面所有条件都不再判断了


用代码带你进一步理解

表结构:


b2c30f15c919413f980b588162c0e3ff.png


映射文件:


主要看这里面的choose中的语句


我把empName放在了choose开头


<!--List<Emp> getEmpByChoose(Emp emp);-->
<select id="getEmpByChoose" resultType="Emp">
    select *from t_emp
    <where>
        <choose>
            <when test="empName!= '' and empName!= null">
                emp_name=#{empName}
            </when>
            <when test="age != '' and age != null">
                age = #{age}
            </when>
            <when test="gender != '' and gender != null">
                gender = #{gender}
            </when>
        </choose>
    </where>
</select>


测试类


这里把张三放到了前面,我们可以看到数据库表中是有张三这条数据的,所以第一个when满足,直接就输出结果(下面的不再判断)


@Test
public void testGetEmpByChoose(){
    SqlSession sqlSession= SqlSessionUtil.getSqlSession();
    DynamicSQLMapper mapper=sqlSession.getMapper(DynamicSQLMapper.class);
    Emp emp=new Emp(null,"张三",20,"男");
    List<Emp> list=mapper.getEmpByChoose(emp);
    list.forEach(System.out::println);
}

结果如下:

DEBUG 12-27 22:35:57,043==> Parameters: 张三(String) (BaseJdbcLogger.java:137) 
DEBUG 12-27 22:35:57,057<==      Total: 1 (BaseJdbcLogger.java:137) 
Emp{empId=1, empName='张三', age=20, gender='男'}

这里我把性别gender改为不男不女,效果还是一样,足以证明我们的后面语句没有判断


94e64e7b7bfc44269e3f9de052706e65.png


把empName改为" ",gender和上面一样不符合要求,但是age 满足要求,一样可以查询到相应信息


dc9136a5e28b430abe1a9b84593b968f.png


当全部内容都不满足条件时,必然emp不会输出

10f847360961438bbe9bb0d9cb926d10.png


相关文章
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
12月前
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
763 1
|
12月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
227 0
Mybatis入门(select标签)
|
12月前
|
SQL Java 数据库连接
Mybatis的<insert>,<update>,<delete>标签用法
这篇文章详细讲解了Mybatis中<insert>, <update>, <delete>标签的使用方法,并提供了示例代码来展示如何执行数据库的增删改操作。
1032 0
|
SQL Java 数据库连接
MyBatis Mapper.XML 标签使用说明
MyBatis Mapper.XML 标签使用说明
144 0
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
639 1
Spring boot 使用mybatis generator 自动生成代码插件
|
7月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
555 0
|
9月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
326 2
|
12月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
463 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。