<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xmomen.module.resource.mapper.ResourceMapperExt">
    <!--
        定义一个查询语句，用于获取资源模型数据。
        id: 该查询语句的唯一标识，在代码中通过此标识调用该查询。
        resultType: 指定查询结果映射到的 Java 类，这里是 com.xmomen.module.resource.model.ResourceModel。
        parameterType: 指定传入的参数类型，这里是查询条件对象 com.xmomen.module.resource.model.ResourceQuery。
    -->
    <select id="getResourceModel"
            resultType="com.xmomen.module.resource.model.ResourceModel"
            parameterType="com.xmomen.module.resource.model.ResourceQuery">
        SELECT * FROM cd_resource t
        <!--
            <where> 标签用于动态生成 SQL 的 WHERE 子句。
            它会自动处理子句开头多余的 AND 关键字。
        -->
        <where>
            <!--
                如果查询条件中的 id 不为空，添加条件 t.ID = #{id} 到 WHERE 子句中。
                #{id} 是 MyBatis 的占位符，会在执行时被实际的参数值替换。
            -->
            <if test="id">
                AND t.ID = #{id}
            </if>
            <if test="entityId">
                AND t.ENTITY_ID = #{entityId}
            </if>
            <if test="entityType">
                AND t.ENTITY_TYPE = #{entityType}
            </if>
            <!--
                如果查询条件中的 ids 不为空，动态生成 IN 子句。
                collection: 表示参数中集合的名称，这里是 ids。
                item: 迭代时当前元素的别名，这里是 item。
                separator: 元素之间的分隔符，这里是逗号。
                open: IN 子句的开始符号，这里是左括号。
                close: IN 子句的结束符号，这里是右括号。
            -->
            <if test="ids">
                AND t.ID IN
                <foreach collection="ids" item="item" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="excludeIds">
                AND t.ID NOT IN
                <foreach collection="excludeIds" item="item" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
        </where>
        <!-- 按照 t.id 对查询结果进行排序 -->
        ORDER BY t.id
    </select>

    <!--
        定义一个更新语句，用于更新默认资源。
        id: 该更新语句的唯一标识，在代码中通过此标识调用该更新操作。
        parameterType: 指定传入的参数类型，这里是字符串类型 java.lang.String。
    -->
    <update id="updateDefaultByEntityId" parameterType="java.lang.String">
        update
        cd_resource
        set
        is_default = 0
        where
        entity_id=#{entityId}
        <!--
            上述 SQL 语句的作用是将 cd_resource 表中 entity_id 等于传入参数 entityId 的记录的 is_default 字段值设置为 0。
            #{entityId} 是 MyBatis 的占位符，会在执行时被实际的参数值替换。
        -->
    </update>
</mapper>