choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。otherwise 也可以不写。
例子:
<select id="getGroupPage" resultMap="ControllerGroupVoMap">
SELECT
cg.id,
cg.group_id,
cg.controller_group_name,
cg.controller_group_type_id,
count( cgd.device_id ) AS deviceCount,
<choose>
<when test="query.controllerGroupTypeId == 1 or query.controllerGroupTypeId == 5">
IF(( SELECT count( lcm.id )
FROM light_config_mode lcm WHERE lcm.controller_group_id = cg.id
) > 0, 1, 0 ) AS isPolicy
</when>
<when test="query.controllerGroupTypeId == 9 or query.controllerGroupTypeId == 10">
IF(( SELECT count( cscm.id )
FROM cooling_switch_config_mode cscm WHERE cscm.controller_group_id = cg.id
) > 0, 1, 0 ) AS isPolicy
</when>
<otherwise>
IF(( SELECT count( cgpp.id )
FROM controller_group_policy_param cgpp WHERE cgpp.controller_group_id = cg.id
) > 0, 1, 0 ) AS isPolicy
</otherwise>
</choose>
FROM
controller_group cg
LEFT JOIN controller_group_device cgd ON cgd.controller_group_id = cg.id
WHERE
cg.delete_flag = 0
AND cg.controller_id = #{query.controllerId}
AND cg.controller_group_type_id = #{query.controllerGroupTypeId}
GROUP BY cg.id
ORDER BY cg.create_time DESC
</select>