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>
接下来发报文做一下测试,当前数据库中有以下数据:
id | user_name | password | real_name | create_time | level |
---|---|---|---|---|---|
1 | lileilei | 20000229 | 李雷雷 | 20230101 | 9 |
2 | hanmeimei | 20021118 | 韩梅梅 | 20230101 | 9 |
3 | zhangsan | 20080506 | 张三 | 20230110 | 1 |
4 | lisi | 20050729 | 李四 | 20230112 | 1 |
5 | wangwu | 19980121 | 王五 | 20230207 | 2 |
6 | zhaoliu | 20030601 | 赵六 | 20230207 | 3 |
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的用户信息。