MyBatis 中的 choose、then、otherwise

MyBatis 中的 choose、then、otherwise

作用

MyBatis 提供的 choose、then、otherwise 标签,用起来有些像 Java 中的 switch 、case、default。当我们想在不同条件下执行不同sql语句则可以使用。

使用格式

choose标签包裹整个代码块,when标签用于表达生效条件,当所有when的条件都没能成立时走进otherwise标签。

  <choose>
    <when test=条件1>
    
    </when>
    <when test=条件2>
    
    </when>
    <otherwise>
    
    </otherwise>
  </choose>

实例

下面这段表示,当输入了userName时则按照用户名查找,当输入了level时则按照等级查找,两者都没输入时则输出所有等级为1的用户。

    <select id="queryUserByWhat" parameterType="User" resultMap="User">
        select * from user_info where
        <choose>
            <when test="userName != null">
                user_name = #{userName}
            </when>
            <when test="level != null">
                level = #{level}
            </when>
            <otherwise>
                level = '1'
            </otherwise>
        </choose>
    </select>

接下来发报文做一下测试,当前数据库中有以下数据:

iduser_namepasswordreal_namecreate_timelevel
1lileilei20000229李雷雷202301019
2hanmeimei20021118韩梅梅202301019
3zhangsan20080506张三202301101
4lisi20050729李四202301121
5wangwu19980121王五202302072
6zhaoliu20030601赵六202302073

1.请求报文带userName
请求报文

{
    "data": {
        "userName": "lileilei"
    }
}

响应报文

{
    "data": [
        {
            "id": 1,
            "userName": "lileilei",
            "password": "20000229",
            "name": "李雷雷",
            "createTime": "20230101",
            "level": "9"
        }
    ],
    "returnCode": "000000",
    "returnMessage": null
}

成功返回了用户名为lileilei的用户信息。

2.请求报文带level
请求报文

{
    "data": {
        "level": "9"
    }
}

响应报文

{
    "data": [
        {
            "id": 1,
            "userName": "lileilei",
            "password": "20000229",
            "name": "李雷雷",
            "createTime": "20230101",
            "level": "9"
        },
        {
            "id": 2,
            "userName": "hanmeimei",
            "password": "20021118",
            "name": "韩梅梅",
            "createTime": "20230101",
            "level": "9"
        }
    ],
    "returnCode": "000000",
    "returnMessage": null
}

成功返回了等级为9的用户信息。
3.无参数
请求报文

{
    "data": {}
}

响应报文

{
    "data": [
        {
            "id": 3,
            "userName": "zhangsan",
            "password": "20080506",
            "name": "张三",
            "createTime": "20230110",
            "level": "1"
        },
        {
            "id": 4,
            "userName": "lisi",
            "password": "20050729",
            "name": "李四",
            "createTime": "20230112",
            "level": "1"
        }
    ],
    "returnCode": "000000",
    "returnMessage": null
}

成功返回了等级为1的用户信息。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Mybatischoose、when、otherwise标签用于在SQL语句编写条件分支逻辑。 choose标签类似于Java的switch语句,可以根据条件选择执行不同的SQL语句。当choose标签的子标签when的条件满足时,将执行该标签下的SQL语句。如果所有when条件都不满足,则执行otherwise标签下的SQL语句。 以下是一个示例: ``` <select id="selectUsers" resultMap="userResultMap"> SELECT * FROM users <where> <choose> <when test="orderBy == 'id'"> ORDER BY id </when> <when test="orderBy == 'name'"> ORDER BY name </when> <when test="orderBy == 'age'"> ORDER BY age </when> <otherwise> ORDER BY id </otherwise> </choose> </where> </select> ``` 在这个示例,根据传入的orderBy参数来选择执行不同的ORDER BY子句。如果orderBy参数的值是'id'、'name'或'age',则分别执行相应的ORDER BY子句;否则,执行默认的ORDER BY id子句。 ### 回答2: MyBatis是一种流行的Java持久化框架,它提供了许多便捷的功能来简化数据库操作。其选择语句(choose)是MyBatis的一种强大功能,用于根据不同的条件执行不同的逻辑。 选择语句可用于替代标准的switch语句或if-else语句。它使用choose、when和otherwise关键字来构建多分支的逻辑判断。 当执行选择语句时,首先会依次判断每个when语句的条件,如果满足条件,则执行when语句内的逻辑。当某个when语句的条件满足时,它的逻辑块会被执行,同时选择语句的执行也会终止。如果所有的when语句都不满足条件,则执行otherwise语句内的逻辑。 当执行选择语句时,可以有多个when语句,每个when语句可以有一个或多个条件。条件可以是简单的比较运算符,也可以是复杂的逻辑表达式。而otherwise语句是可选的,它用于处理所有的条件都不满足时的逻辑。 选择语句的执行是有顺序的,当某个when语句的条件满足时,它的逻辑块会被执行,而之后的所有when和otherwise语句都会被忽略。因此,当存在多个满足条件的when语句时,只会执行第一个满足条件的when逻辑块。 通过使用选择语句,我们可以根据不同的条件执行不同的逻辑,从而提高程序的灵活性和可读性。当需求需要根据不同条件执行不同逻辑时,选择语句是一个非常好的解决方案。而MyBatis提供的choose、when和otherwise关键字能够很方便地实现选择语句的功能。 ### 回答3: MyBatis choose、when、otherwise 用于处理多个条件的选择语句。 在进行数据检索时,我们经常会有多个条件需要进行判断,根据不同的条件选择不同的 SQL 语句执行。 在 MyBatis 使用 choose、when、otherwise 进行条件选择,通常的语法结构如下: ``` <choose> <when test="condition1"> <!-- SQL1 --> </when> <when test="condition2"> <!-- SQL2 --> </when> <otherwise> <!-- SQL3 --> </otherwise> </choose> ``` - `<choose>` 是选择语句的的起始标签。 - `<when>` 是条件判断的标签。当条件满足时,会执行对应的 SQL 语句。 - `<otherwise>` 是当所有的条件都不满足时,会执行的标签。 - `test` 表达式用于判断是否满足条件。可以根据参数的值、对象的属性等来进行判断。 在实际使用时,可以根据具体的需求对条件进行判断,可以使用多个 `<when>` 进行多个条件的判断。 在选择语句,最多只会有一个分支被执行。当某个条件满足时,会执行对应的 SQL 语句,并结束整个 choose 语句块。 当所有的条件都不满足时,会执行 `<otherwise>` 标签的 SQL 语句。 通过使用 choose、when、otherwise,可以实现根据多个条件进行选择的功能,避免了编写复杂的 IF ELSE 语句。这种方式使得 SQL 语句的编写更加灵活和可读性更高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云player

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值