"mapper" :
是整个映射文件的根元素, 包含了所有的其他标签, 有一个重要的属性: namespace, 用来指定映射文件对应的接口的全限定名, 保证多个映射文件中使用相同的ID不会产生冲突, 因为每个ID都是基于其命名空间唯一的
点击查看代码
<mapper namespace="com.example.mapper.UserMapper">
<!-- 其他标签 -->
</mapper>
点击查看代码
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO user (name, email) VALUES (#{name}, #{email})
</insert>
......
点击查看代码
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="email_address"/>
</resultMap>
点击查看代码
<sql id="userColumns">id, name, email</sql>
点击查看代码
<if> 标签用于条件判断,如果测试表达式为真,则包含该部分SQL片段
点击查看代码
<select id="findUserByCondition" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<choose>
<when test="id != null">
id = #{id}
</when>
<when test="email != null and email != ''">
email = #{email}
</when>
<otherwise>
state = 'ACTIVE'
</otherwise>
</choose>
</where>
</select>
属性:
"collection": 要迭代的集合属性名(通常是传入参数的名字)
"item": 集合中的每个元素的别名
"index": 集合索引的别名(可选)
"open": 开始字符串(例如:"( ")
"separator": 分隔符(例如:",")
"close": 结束字符串(例如:")")
点击查看代码
<select id="selectUsersInList" parameterType="list" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach collection="list" item="itemId" open="(" separator="," close=")">
#{itemId}
</foreach>
</select>
<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO user (name, email) VALUES
<foreach collection="list" item="user" separator=",">
(#{user.name}, #{user.email})
</foreach>
</insert>
"trim" : 自定义前缀和后缀,并可以移除指定的内容。
"where" : 如果有内容则添加WHERE关键字,并且会移除可能存在的多余AND/OR。
"set" : 用于UPDATE语句,它会添加SET关键字,并且会移除最后一个逗号。
属性:
"prefix": 添加到开始的字符串
"suffix": 添加到结束的字符串
"prefixOverrides": 移除前面的字符串
"suffixOverrides": 移除后面的字符串
点击查看代码
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="name != null">name=#{name},</if>
<if test="email != null">email=#{email},</if>
</set>
WHERE id = #{id}
</update>
<select id="findUsers" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="email != null and email != ''">
AND email = #{email}
</if>
</where>
</select>