一、<select>标签
用于定义查询语句。
示例:
<select id="findUserById" parameterType="int" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id}
</select>
二、<insert>标签
用于定义插入语句。
示例:
<insert id="insertUser" parameterType="com.example.User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
三、<update>标签
用于定义更新语句。
示例:
<update id="updateUser" parameterType="com.example.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
四、<delete>标签
用于定义删除语句。
示例:
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
五、<resultMap>标签
用于自定义结果映射关系。
示例:
<resultMap id="userResultMap" type="com.example.User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="age" column="user_age"/>
</resultMap>
六、<sql>标签
用于定义可复用的 SQL 片段。
示例:
<sql id="userColumns">id, name, age</sql>
八、<include>标签
用于引用 <sql> 标签定义的 SQL 片段。
示例:
<select id="findAllUsers" resultType="com.example.User">
SELECT <include refid="userColumns"/> FROM user
</select>
九、<where>标签
用于在查询条件中动态添加 WHERE 关键字。
示例:
<select id="findUsersByConditions" parameterType="com.example.User" resultType="com.example.User">
SELECT * FROM user
<where>
<if test="name!= null">AND name = #{name}</if>
<if test="age!= null">AND age = #{age}</if>
</where>
</select>
十、<if>标签
用于根据条件判断是否添加 SQL 片段。
示例:同上述 <where> 中的用法。
<select id="findUsersByConditions" parameterType="com.example.UserQuery" resultType="com.example.User">
SELECT * FROM users
<where>
<if test="age!= null">
age = #{age}
</if>
<if test="gender!= null">
AND gender = #{gender}
</if>
</where>
</select>
十一、<choose>、<when>、<otherwise>标签
用于类似 switch-case 的条件判断。
示例:
<select id="findUsersByComplexConditions" resultType="com.example.User">
SELECT * FROM user
<where>
<choose>
<when test="name!= null and age!= null">AND name = #{name} AND age = #{age}</when>
<when test="name!= null">AND name = #{name}</when>
<when test="age!= null">AND age = #{age}</when>
<otherwise>AND 1=1</otherwise>
</choose>
</where>
</select>
十二、<foreach>标签
用于循环遍历集合参数,生成 IN 条件等。
示例:
<select id="findUsersByIds" parameterType="java.util.List" resultType="com.example.User">
SELECT * FROM user WHERE id IN
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
十三、<trim>标签
用于去除 SQL 片段中的多余字符,如多余的 AND、OR 等。
示例:
<select id="findUsersByTrim" resultType="com.example.User">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="name!= null">AND name = #{name}</if>
<if test="age!= null">AND age = #{age}</if>
</trim>
</select>
十四、<bind>标签
用于在 SQL 语句中创建新的变量。
示例:
<select id="findUsersByNameLike" resultType="com.example.User">
SELECT * FROM user
<bind name="nameLike" value="'%' + name + '%'"/>
WHERE name LIKE #{nameLike}
</select>
十五、<set>标签
用于在更新语句中动态设置需要更新的字段,去除多余的逗号。
示例:
<update id="updateUserPartial" parameterType="com.example.User">
UPDATE user
<set>
<if test="name!= null">name = #{name},</if>
<if test="age!= null">age = #{age},</if>
</set>
WHERE id = #{id}
</update>