mybatis 中case when 结合 foreach
时间: 2023-07-09 22:15:32 浏览: 199
在 MyBatis 中,可以使用 `<foreach>` 标签来模拟FOREACH循环,然后结合CASE WHEN语句来实现动态查询。以下是一个示例:
```
<select id="dynamicQuery" resultType="java.util.Map">
SELECT
<foreach item="column" collection="columns" separator=",">
${column} AS ${column},
CASE
WHEN ${column} > #{value} THEN 'Greater than value'
WHEN ${column} < #{value} THEN 'Less than value'
ELSE 'Equal to value'
END AS ${column}_result
</foreach>
FROM myTable
</select>
```
在这个示例中,我们首先定义一个参数 `columns`,它是一个列名列表。然后在 `SELECT` 语句中使用 `<foreach>` 标签,循环遍历列名列表,并将每个列名添加到 SQL 语句中。在每个列名后面,使用 CASE WHEN 语句来生成一个列名后缀为 `_result` 的结果列。注意,在 SQL 中,我们使用 `${column}` 来引用列名和结果列名,使用 `#{value}` 来引用参数值。最后,我们将结果类型设置为 `java.util.Map`,以便可以在代码中动态获取结果列。
这样,我们就可以根据列名列表动态生成 CASE WHEN 语句,而不需要在代码中手动拼接 SQL 语句。
阅读全文