在MyBatis中,CASE WHEN
语句用于在SQL查询中进行条件判断,类似于其他编程语言中的if/else
语句。以下是CASE WHEN
在MyBatis中的基本用法:
简单CASE
函数
SELECT
id,
name,
age,
CASE
WHEN age >= 18 THEN '成年'
ELSE '未成年'
END AS age_group
FROM
user
CASE
搜索函数
SELECT
id,
name,
age,
CASE
WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他'
END AS gender
FROM
user
注意事项
-
CASE
语句只返回第一个符合条件的值,如果存在多个WHEN
条件,后面的条件将被忽略。 -
在MyBatis的XML映射文件中直接使用
CASE WHEN
可能会遇到语法错误,特别是当涉及到复杂的逻辑时。在这种情况下,可以考虑使用MyBatis Plus的@SqlParser
注解来解决解析问题。 -
当
CASE
语句与联查表一起使用时,需要注意联查表可能没有数据的情况,这可能导致CASE
语句中的某些字段无法赋值,进而影响查询结果。
示例:批量更新
update product
set
name = CASE id
WHEN 901 THEN '啊啊啊'
WHEN 902 THEN NULL
END,
stock = CASE id
WHEN 901 THEN NULL
WHEN 902 THEN 100
END
WHERE
id IN (901, 902);
为了避免因部分字段为空而导致数据置空的问题,可以在then
后面加上IFNULL
判断,如果为空则保持原值不变。
示例:动态SQL构建
<select id="selectUsersByAgeGroup" resultMap="userResultMap">
SELECT
id,
name,
age,
CASE
WHEN age >= 18 THEN '成年'
ELSE '未成年'
END AS age_group
FROM
user
</select>
在使用CASE WHEN
进行条件筛选时,如果遇到语法错误,请确保SQL语句在MySQL命令行中能够正确执行,并且检查MyBatis映射文件中的语法是否正确。