MyBatis中XML标签

<mapper>

<mapper> 标签是 MyBatis XML 文件中的根标签,用于指定命名空间和包含各种 SQL 语句(如 <select>, <insert>, <update>, <delete>)以及其它配置信息。

<mapper namespace="com.example.mapper.UserMapper">
    <!-- SQL语句和其它配置 -->
</mapper>
​

<select>

<select> 标签用于定义查询语句,可以返回单个对象或集合。

<select id="selectUserById" parameterType="int" resultType="User">
    SELECT * FROM users WHERE id = #{id}
</select>

<insert>

<insert> 标签用于定义插入语句。

<insert id="insertUser" parameterType="User">
    INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})
</insert>

<update>

<update> 标签用于定义更新语句。

<update id="updateUser" parameterType="User">
    UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
</update>

<delete>

<delete> 标签用于定义删除语句。

<delete id="deleteUserById" parameterType="int">
    DELETE FROM users WHERE id = #{id}
</delete>

<resultMap>

<resultMap> 标签用于定义结果集映射规则,将数据库字段映射为对象的属性。

<resultMap id="userResultMap" type="User">
    <id property="id" column="id" />
    <result property="username" column="username" />
    <result property="password" column="password" />
</resultMap>

<sql>

<sql> 标签用于定义可重用的 SQL 片段。

<sql id="userColumns">id, username, password</sql>

<include>

<include> 标签用于包含之前定义的 <sql> 片段。

<select id="selectUserColumns" resultType="String">
    SELECT <include refid="userColumns" /> FROM users
</select>

<if>, <choose>, <when>, <otherwise>

条件判断和分支选择的标签,用于根据条件动态生成 SQL。

<select id="selectUsers" parameterType="Map" resultType="User">
    SELECT * FROM users
    <where>
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="password != null">
            AND password = #{password}
        </if>
    </where>
</select>
​
<select id="selectUsersByCondition" parameterType="Map" resultType="User">
    SELECT * FROM users
    <choose>
        <when test="username != null">
            WHERE username = #{username}
        </when>
        <when test="password != null">
            WHERE password = #{password}
        </when>
        <otherwise>
            WHERE id = 1
        </otherwise>
    </choose>
</select>

<trim>, <where>, <set>

用于动态生成 SQL 片段,处理不确定的 SQL 部分。

<update id="updateUserSelective" parameterType="User">
    UPDATE users
    <set>
        <if test="username != null">username = #{username},</if>
        <if test="password != null">password = #{password},</if>
    </set>
    WHERE id = #{id}
</update>
​
<select id="selectUsersByNameOrId" parameterType="Map" resultType="User">
    SELECT * FROM users
    <where>
        <if test="username != null">username = #{username}</if>
        <if test="id != null">OR id = #{id}</if>
    </where>
</select>

<foreach>

<foreach> 标签用于在 SQL 中迭代集合。

     SELECT * FROM users WHERE id IN              #{id}      

​
### cache;, cache-ref;
​
cache标签用于配置缓存,提高查询性能。cache-ref 用于引用其他命名空间的缓存配置。
​
```xml
<!-- 配置全局缓存 -->
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
​
<!-- 引用其他Mapper的缓存配置 -->
<cache-ref namespace="com.example.mapper.OtherMapper"/>

<selectKey>

<selectKey> 标签用于在插入之后获取生成的主键值。

<insert id="insertUserAndGetId" parameterType="User">
    <selectKey keyProperty="id" order="AFTER" resultType="int">
        SELECT LAST_INSERT_ID()
    </selectKey>
    INSERT INTO users (username, password) VALUES (#{username}, #{password})
</insert>