<selectid="selectUser"resultType="User">
SELECT * FROM user
<where><iftest="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
if><iftest="age != null">
AND age = #{age}
if>where>select>
2️⃣ / / 示例
<selectid="selectUser"resultType="User">
SELECT * FROM user
<where><choose><whentest="name != null">
AND name = #{name}
when><whentest="age != null">
AND age = #{age}
when><otherwise>
AND status = 'active'
otherwise>choose>where>select>
3️⃣ 示例(手动 WHERE 拼接)
<selectid="selectUser"resultType="User">
SELECT * FROM user
<trimprefix="WHERE"prefixOverrides="AND |OR "><iftest="name != null">AND name = #{name}if><iftest="age != null">AND age = #{age}if>trim>select>
4️⃣ 示例(动态更新)
<updateid="updateUser">
UPDATE user
<set><iftest="name != null">name = #{name},if><iftest="age != null">age = #{age},if>set>
WHERE id = #{id}
update>
5️⃣ 示例(IN 查询)
<selectid="selectByIds"resultType="User">
SELECT * FROM user WHERE id IN
<foreachcollection="idList"item="id"open="("separator=","close=")">
#{id}
foreach>select>
语法片段
含义
id="selectByIds"
这是 Mapper 接口中方法对应的 SQL ID
resultType="User"
查询结果会映射成 User 类
collection="idList"
传入的是一个集合参数名,比如一个 List 类型的参数
item="id"
遍历集合中的每个元素,当前元素命名为 id
open="("
拼接 SQL 时,开头加一个左括号 (
separator=","
每个参数之间用逗号隔开
close=")"
最后一个参数后加上右括号 )
#{id}
当前遍历元素的值,作为 SQL 参数传入(防 SQL 注入)
6️⃣ 示例(模糊搜索)
<selectid="searchByName"resultType="User"><bindname="pattern"value="'%' + name + '%'"/>
SELECT * FROM user WHERE name LIKE #{pattern}
select>