1. <mapper> 标签
    描述:根元素,用于定义一个 Mapper 接口。
    属性:
    namespace:指定 Mapper 接口的全限定名。
    示例:

    <mapper namespace="com.example.mapper.UserMapper">
     <!-- SQL 语句定义 -->
    </mapper>
    
  2. <select> 标签
    描述:用于定义查询 SQL 语句。
    属性:
    id:唯一标识此 SQL 语句的方法名。
    parameterType:输入参数类型。
    resultType:输出结果类型。
    fetchSize:每次获取的结果集大小。
    resultSetType:结果集类型(如 FORWARD_ONLY, SCROLL_INSENSITIVE 等)。
    statementType:语句类型(如 STATEMENT, PREPARED, CALLABLE)。
    keyProperty:主键属性名。
    keyColumn:主键对应的数据库列名。
    useCache:是否使用缓存。
    timeout:执行 SQL 语句的超时时间(毫秒)。
    databaseId:指定数据库 ID。
    lang:SQL 语言驱动器。
    示例
<select id="selectAllUsers" parameterType="int" resultType="com.example.model.User" fetchSize="100" timeout="5000">
    SELECT * FROM users WHERE id = #{id}
</select>
  1. <insert> 标签
    描述:用于定义插入 SQL 语句。
    属性:
    id:唯一标识此 SQL 语句的方法名。
    parameterType:输入参数类型。
    useGeneratedKeys:是否使用自动生成的主键。
    keyProperty:主键属性名。
    keyColumn:主键对应的数据库列名。
    statementType:语句类型(如 STATEMENT, PREPARED, CALLABLE)。
    timeout:执行 SQL 语句的超时时间(毫秒)。
    databaseId:指定数据库 ID。
    lang:SQL 语言驱动器。
    示例:
<insert id="insertUser" parameterType="com.example.model.User" useGeneratedKeys="true" keyProperty="id" statementType="PREPARED" timeout="5000">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
  1. <update> 标签
    描述:用于定义更新 SQL 语句。
    属性:
    id:唯一标识此 SQL 语句的方法名。
    parameterType:输入参数类型。
    statementType:语句类型(如 STATEMENT, PREPARED, CALLABLE)。
    timeout:执行 SQL 语句的超时时间(毫秒)。
    databaseId:指定数据库 ID。
    lang:SQL 语言驱动器。
    示例:
<update id="updateUser" parameterType="com.example.model.User" statementType="PREPARED" timeout="5000">
    UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
  1. <delete> 标签
    描述:用于定义删除 SQL 语句。
    属性:
    id:唯一标识此 SQL 语句的方法名。
    parameterType:输入参数类型。
    statementType:语句类型(如 STATEMENT, PREPARED, CALLABLE)。
    timeout:执行 SQL 语句的超时时间(毫秒)。
    databaseId:指定数据库 ID。
    lang:SQL 语言驱动器。
    示例:
<delete id="deleteUser" parameterType="int" statementType="PREPARED" timeout="5000">
    DELETE FROM users WHERE id = #{id}
</delete>
  1. <resultMap> 标签
    描述:用于定义复杂的结果映射关系。
    属性:
    id:唯一标识此 resultMap。
    type:结果对象的类型。
    autoMapping:是否自动映射列名到属性名。
    extends:继承其他 resultMap。
    示例:
<resultMap id="userResultMap" type="com.example.model.User" autoMapping="true">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
</resultMap>
  1. <sql> 标签
    描述:用于定义可重用的 SQL 片段。
    属性:
    id:唯一标识此 SQL 片段。
    示例:
<sql id="commonColumns">name, age</sql>

  1. <include> 标签
    描述:用于引用 <sql> 标签定义的 SQL 片段。
    属性:
    refid:引用的 SQL 片段 ID。
    示例:
<select id="selectAllUsers" resultType="com.example.model.User">
    SELECT <include refid="commonColumns"/> FROM users WHERE id = #{id}
</select>
  1. <if> 标签
    描述:用于条件判断,根据参数值决定是否包含某些 SQL 语句片段。
    属性:
    test:条件表达式。
    示例:
<select id="findUserByName" parameterType="String" resultType="com.example.model.User">
    SELECT * FROM users WHERE 1 = 1
    <if test="name != null and name != ''">
        AND name = #{name}
    </if>
</select>
  1. <choose> / <when> / <otherwise> 标签
    描述:用于多条件判断,类似于 switch 语句。
    属性:
    <choose>:开始标签。
    <when>:条件分支。
    <otherwise>:默认分支。
    示例:
<select id="findUserByCondition" parameterType="com.example.model.User" resultType="com.example.model.User">
    SELECT * FROM users WHERE 1 = 1
    <choose>
        <when test="name != null and name != ''">
            AND name = #{name}
        </when>
        <when test="age != null">
            AND age = #{age}
        </when>
        <otherwise>
            AND id > 0
        </otherwise>
    </choose>
</select>
  1. <foreach> 标签
    描述:用于循环遍历集合或数组,生成动态 SQL 语句。
    属性:
    collection:集合或数组名称。
    item:当前项的变量名。
    open:开始符号。
    close:结束符号。
    separator:分隔符。
    示例:
<select id="findUsersByIds" parameterType="List<Integer>" resultType="com.example.model.User">
    SELECT * FROM users WHERE id IN
    <foreach collection="list" item="item" open="(" close=")" separator=",">
        #{item}
    </foreach>
</select>

  1. <cache> 标签
    描述:用于定义缓存配置。
    属性:
    type:缓存类型(如 PERPETUAL, FIFO, LRU 等)。
    eviction:缓存淘汰策略。
    flushInterval:刷新间隔(毫秒)。
    size:缓存大小。
    readOnly:是否只读。
    示例:
<mapper namespace="com.example.mapper.UserMapper">
    <cache type="PERPETUAL" eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
    <!-- SQL 语句定义 -->
</mapper>

  1. <discriminator> 标签
    区分不同的结果类型:
    在多表联合查询或子类继承的情况下,可以根据某个字段的值来区分不同的结果类型。
    这个字段通常是一个标识字段,比如表示用户类型的字段。
    映射到不同的 Java 类:
    根据字段值的不同,可以将查询结果映射到不同的 Java 类上。
    这样可以在不修改 SQL 语句的情况下,实现不同类型数据的映射。

属性:
column:指定数据库中的列名。
javaType:指定该列的 Java 类型。
jdbcType:指定该列的 JDBC 类型。
case:定义不同的情况及其映射结果类型

<mapper namespace="com.example.mapper.UserMapper">

    <resultMap id="userResultMap" type="com.example.model.NormalUser">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>

        <discriminator javaType="String" column="user_type">
            <case value="normal" resultType="com.example.model.NormalUser"/>
            <case value="admin" resultType="com.example.model.AdminUser"/>
        </discriminator>
    </resultMap>

    <select id="getUserById" resultMap="userResultMap" parameterType="int">
        SELECT id, username, password, user_type FROM users WHERE id = #{id}
    </select>

</mapper>

14<set> 标签:
1.动态生成 SET 子句:
根据传入的参数动态生成 SET 子句,只包含需要更新的字段。
避免更新所有字段,即使某些字段没有变化。
2.条件判断:
可以结合 <if> 标签进行条件判断,只有当某个字段有值时才将其包含在 SET 子句中。
3.提高性能:
只更新实际需要更新的字段,减少数据库操作的开销。

<mapper namespace="com.example.mapper.UserMapper">

    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users
        <set>
            <if test="username != null and username != ''">
                username = #{username},
            </if>
            <if test="password != null and password != ''">
                password = #{password},
            </if>
            <if test="email != null and email != ''">
                email = #{email}
            </if>
        </set>
        WHERE id = #{id}
    </update>

</mapper>

刀枪不入的煎鸡蛋
1 声望1 粉丝