1. <mapper>
- 作用: 定义映射文件的根元素。包含所有的 SQL 语句和映射配置。
- 属性:
namespace
:用于指定当前映射文件对应的接口类的全限定名,起到命名空间的作用。
<mapper namespace="com.example.mapper.UserMapper">
<!-- SQL 语句和映射关系 -->
</mapper>
2. <select>
- 作用: 定义
SELECT
查询语句,用于从数据库中获取数据。
- 常用属性:
id
: SQL 语句的唯一标识符,通常与 Mapper 接口中的方法名对应。
resultType
: 指定返回结果的类型,通常是一个 Java 类的全限定名或别名。
parameterType
: 指定输入参数的类型。
<select id="selectUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
3. <insert>
- 作用: 定义
INSERT
语句,用于向数据库插入数据。
- 常用属性:
id
: SQL 语句的唯一标识符。
parameterType
: 指定输入参数的类型。
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
4. <update>
- 作用: 定义
UPDATE
语句,用于更新数据库中的数据。
- 常用属性:
id
: SQL 语句的唯一标识符。
parameterType
: 指定输入参数的类型。
<update id="updateUser" parameterType="com.example.model.User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
5. <delete>
- 作用: 定义
DELETE
语句,用于删除数据库中的数据。
- 常用属性:
id
: SQL 语句的唯一标识符。
parameterType
: 指定输入参数的类型。
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
6. <resultMap>
- 作用: 复杂查询时,用于将数据库字段映射到 Java 对象的属性。它提供比 resultType 更灵活和详细的字段映射。
- 常用属性:
id
: resultMap 的唯一标识符。
type
: 指定结果集要映射的 Java 对象类型。
<resultMap id="userResultMap" type="com.example.model.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
<select id="selectUserById" parameterType="int" resultMap="userResultMap">
SELECT * FROM users WHERE id = #{id}
</select>
7. <sql>
与 <include>
- 作用: 定义可复用的 SQL 片段,减少代码重复。
- 常用属性:
id
: SQL 片段的唯一标识符。
type
: 指定结果集要映射的 Java 对象类型。
<sql id="userColumns">
id, name, age
</sql>
<select id="selectUserById" parameterType="int" resultType="com.example.model.User">
SELECT <include refid="userColumns"/> FROM users WHERE id = #{id}
</select>
8. <if>
- 作用: 在 SQL 语句中动态添加条件,通常与参数一起使用。
- 常用属性:
test
: 表示条件表达式,只有条件为 true 时,才会在 SQL 中拼接该部分内容。
SELECT * FROM user
WHERE 1=1
<if test="username != null and username != ''">
AND username = #{username}
</if>
<if test="email != null and email != ''">
AND email = #{email}
</if>
<if test="phone != null and phone != ''">
AND phone = #{phone}
</if>
</select>