<selectid="selectUser"parameterType="int"resultMap="UserResultMap"> SELECT * FROM users WHERE id = #{id} </select>
<sql> 标签
功能:定义可重用的 SQL 片段。
常用属性:
id:必须,定义该 SQL 片段的唯一标识符。
1 2 3
<sqlid="userColumns"> id, name, age </sql>
<include> 标签
功能:引用 <sql> 标签定义的 SQL 片段。
常用属性:
refid:必须,引用 <sql> 标签的 id 属性。
1 2 3
<selectid="selectUsers"resultType="User"> SELECT <includerefid="userColumns"/> FROM users </select>
动态 SQL 标签
<if> 标签
功能:条件性地包含 SQL 语句片段。
常用属性:
test:必须,定义一个测试表达式,如果为 true,则包含标签内的内容。
1 2 3 4 5 6 7
<selectid="selectUsersByCondition"parameterType="map"resultType="User"> SELECT * FROM users <where> <iftest="name != null">AND name = #{name}</if> <iftest="age != null">AND age = #{age}</if> </where> </select>
<choose>、<when>、<otherwise> 标签
功能:类似于 Java 中的 switch 语句,进行条件选择。
常用属性:
<when>:必须,包含 test 属性,用于定义测试表达式。
<otherwise>:可选,当所有 <when> 都不匹配时执行。
1 2 3 4 5 6 7 8 9 10
<selectid="selectUsersByCondition"parameterType="map"resultType="User"> SELECT * FROM users <where> <choose> <whentest="name != null">AND name = #{name}</when> <whentest="age != null">AND age = #{age}</when> <otherwise>AND 1 = 1</otherwise> </choose> </where> </select>
<foreach> 标签
功能:用于遍历集合,以生成动态 SQL。
常用属性:
item:必须,定义集合中每个元素的别名。
index:可选,定义集合中每个元素的索引。
collection:必须,定义要遍历的集合。
open:可选,定义遍历生成的 SQL 的起始字符串。
separator:可选,定义每个元素之间的分隔符。
close:可选,定义遍历生成的 SQL 的结束字符串。
1 2 3 4 5 6
<selectid="selectUsersByIds"parameterType="list"resultType="User"> SELECT * FROM users WHERE id IN <foreachitem="id"index="index"collection="list"open="("separator=","close=")"> #{id} </foreach> </select>
<trim>、<where>、<set> 标签
功能:用于动态地生成 SQL 语句。
常用属性:
<trim>:用于在 SQL 片段中添加前缀或后缀,并删除多余的前缀或后缀。
prefix:可选,定义在生成的 SQL 语句前添加的字符串。
suffix:可选,定义在生成的 SQL 语句后添加的字符串。
prefixOverrides:可选,定义需要删除的多余前缀。
suffixOverrides:可选,定义需要删除的多余后缀。
1 2 3 4
<trimprefix="WHERE"prefixOverrides="AND |OR"> <iftest="name != null">AND name = #{name}</if> <iftest="age != null">AND age = #{age}</if> </trim>
****:自动在内容前添加 WHERE 关键字,如果内容不为空,并删除多余的 AND 或 OR。
1 2 3 4
<where> <iftest="name != null">AND name = #{name}</if> <iftest="age != null">AND age = #{age}</if> </where>
****:自动在内容前添加 SET 关键字,并删除多余的逗号。
1 2 3 4 5 6 7 8
<updateid="updateUser"parameterType="User"> UPDATE users <set> <iftest="name != null">name = #{name},</if> <iftest="age != null">age = #{age},</if> </set> WHERE id = #{id} </update>