在 MyBatis 中,可以使用 <if>
標簽結合 SQL 語句來實現 case when 的功能。以下是一個示例:
首先,創建一個實體類(例如 User):
public class User {
private Integer id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}
然后,在 MyBatis 的映射文件中編寫動態 SQL:
<select id="findUsers" resultMap="UserResultMap">
SELECT * FROM users
WHERE 1 = 1
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
在這個例子中,我們使用了 <if>
標簽來根據參數是否為空來動態生成 SQL 語句。但是,這并不是真正的 case when 語法。要實現類似 case when 的功能,可以使用 MySQL 的內置函數 CASE
。以下是一個使用 case when 的示例:
<select id="findUsersWithCase" resultMap="UserResultMap">
SELECT *,
CASE
WHEN age < 18 THEN '少年'
WHEN age BETWEEN 18 AND 30 THEN '青年'
WHEN age BETWEEN 31 AND 50 THEN '中年'
ELSE '老年'
END AS age_group
FROM users
</select>
在這個例子中,我們使用了 CASE
語句來根據用戶的年齡為其分配一個年齡組。注意,這個示例是針對 MySQL 數據庫的。如果你使用的是其他數據庫,可能需要使用不同的函數來實現類似的功能。例如,在 SQL Server 中,可以使用 IIF
函數:
<select id="findUsersWithCase" resultMap="UserResultMap">
SELECT *,
IIF(age < 18, '少年',
IIF(age BETWEEN 18 AND 30, '青年',
IIF(age BETWEEN 31 AND 50, '中年', '老年'))) AS age_group
FROM users
</select>
總之,要根據你使用的數據庫來選擇合適的方法來實現類似 case when 的功能。在 MyBatis 中,可以使用 <if>
標簽結合 SQL 語句來實現動態 SQL,而在 MySQL 中,可以使用內置函數(如 CASE
、IIF
等)來實現類似 case when 的功能。