1、mapper:
- 属性:
namespace
:指定命名空间,通常与接口或 DAO 类的全限定名一致,用于唯一标识映射文件中的各个 SQL 语句和映射。
<mapper namespace="com.example.dao.UserMapper">
<!-- SQL statements and mappings go here -->
</mapper>
2、resultMap:
- 定义结果集到对象的映射关系,用于复杂查询或者需要定制映射规则的情况。
- 属性:
id
:唯一标识该结果集映射。type
:映射的 Java 类型。
- 属性:
column
:数据库列名。property
:Java 对象的属性名。
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id" />
<result property="username" column="username" />
<result property="email" column="email" />
<!-- Other mappings -->
</resultMap>
3、select:
- 定义查询语句,通常用于从数据库中检索数据。
- 属性:
id
:唯一标识该 SQL 语句,通常与命名空间结合使用。resultType
或resultMap
:指定返回结果的类型或结果集映射。
<select id="getUserById" resultMap="userResultMap">
SELECT * FROM users WHERE id = #{id}
</select>
4、insert:
- 定义插入语句,用于将数据插入到数据库中。
- 属性:
id
:唯一标识该 SQL 语句,通常与命名空间结合使用。parameterType
:指定传入 SQL 语句的参数类型。
<insert id="insertUser" parameterType="User">
INSERT INTO users (username, email) VALUES (#{username}, #{email})
</insert>
5、update:
- 定义更新语句,用于更新数据库中的现有数据。
- 属性:
id
:唯一标识该 SQL 语句,通常与命名空间结合使用。parameterType
:指定传入 SQL 语句的参数类型。
<update id="updateUser" parameterType="User">
UPDATE users SET username = #{username}, email = #{email} WHERE id = #{id}
</update>
6、delete:
- 定义删除语句,用于从数据库中删除数据。
- 属性:
id
:唯一标识该 SQL 语句,通常与命名空间结合使用。
<delete id="deleteUserById">
DELETE FROM users WHERE id = #{id}
</delete>
7、parameterType:
- 定义传递给SQL语句的参数类型,可以是基本类型、Java对象或者Map。
<select id="getUserById" resultMap="userResultMap" parameterType="long">
SELECT * FROM users WHERE id = #{value}
</select>
8、resultType:
- 定义从数据库返回的单个结果对象的类型。
<select id="getUsernameById" resultType="String">
SELECT username FROM users WHERE id = #{id}
</select>
9、useGeneratedKeys 和 keyProperty:
- 用于插入语句中,指示数据库是否自动生成主键以及将主键值设置到Java对象的哪个属性中。
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO users (username, email) VALUES (#{username}, #{email})
</insert>
10、if:
- 条件判断,根据条件动态包含 SQL 片段。
- 属性:
test
:指定一个表达式,根据表达式的结果决定是否包含该条件中的 SQL 片段。
<select id="selectUsersByCriteria" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">AND username = #{username}</if>
<if test="email != null">AND email = #{email}</if>
</where>
</select>
11、choose、when、otherwise 元素:
- 类似于 Java 中的 switch-case 结构,根据条件选择不同的分支。
- 属性:
- 无特定的属性,但需要配合
when
和otherwise
使用。
- 无特定的属性,但需要配合
<select id="selectUsersByStatus" parameterType="String" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="status == 'active'">AND status = 'active'</when>
<when test="status == 'inactive'">AND status = 'inactive'</when>
<otherwise>AND status = 'unknown'</otherwise>
</choose>
</where>
</select>
12、foreach :
- 用于遍历集合,并生成对应的 SQL 片段。
- 属性:
item
:指定在迭代过程中每个元素的名称。collection
:指定要迭代的集合。open
:指定迭代结果的开头部分。close
:指定迭代结果的结尾部分。separator
:指定在迭代结果之间放置的分隔符。
<select id="getUsersByIds" resultMap="userResultMap">
SELECT * FROM users
WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</select>
13、where:
- 用于动态生成 SQL 查询语句的条件部分,并且能够处理条件为空时不生成多余的
AND
或OR
。
<select id="getUser" resultMap="userResultMap">
SELECT * FROM users
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="username != null">
AND username = #{username}
</if>
</where>
</select>