<?xml version="1.0" encoding="UTF-8" ?>
<!-- 声明 MyBatis 映射文件的 DOCTYPE，指定其遵循 MyBatis 3.0 的 DTD -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!-- 定义该映射文件的命名空间，与 DormRepairDao 接口对应 -->
<mapper namespace="com.itheima.dao.DormRepairDao" >

    <!-- 分页查询宿舍维修记录 -->
    <select id="getDormRepairList" parameterType="DormRepair" resultType="DormRepair">
        <!-- 查询宿舍维修记录表 -->
        select * from d_dormrepair
        <where>
            <!-- 根据宿舍 ID 进行模糊查询 -->
            <if test="d_id!=null and d_id!=0">
                and d_id like '%${d_id}%'
            </if>
            <!-- 根据宿舍楼进行模糊查询 -->
            <if test="d_dormbuilding !=null and d_dormbuilding !=''">
                and d_dormbuilding like '%${d_dormbuilding}%'
            </if>
        </where>
        <!-- 按维修记录 ID 升序排序 -->
        ORDER BY r_id asc
        <!-- 实现分页功能 -->
        limit #{currentPage}, #{pageSize}
    </select>

    <!-- 查询宿舍维修记录总数 -->
    <select id="totalCount" resultType="Integer">
        <!-- 查询宿舍维修表中的记录数 -->
        select count(r_id) from d_dormrepair
        <where>
            <!-- 根据宿舍 ID 进行模糊查询 -->
            <if test="d_id!=null and d_id!=0">
                and d_id like '%${d_id}%'
            </if>
            <!-- 根据宿舍楼进行模糊查询 -->
            <if test="d_dormbuilding !=null and d_dormbuilding !=''">
                and d_dormbuilding like '%${d_dormbuilding}%'
            </if>
        </where>
    </select>

    <!-- 添加宿舍维修记录 -->
    <insert id="addDormRepair" parameterType="DormRepair" keyProperty="r_id" useGeneratedKeys="true">
        <!-- 插入宿舍维修信息，包括宿舍 ID、宿舍楼、维修名称、原因、创建时间和更新时间 -->
        insert into d_dormrepair (d_id, d_dormbuilding, r_name, reason, create_time, update_time)
        values (#{d_id}, #{d_dormbuilding}, #{r_name}, #{reason}, now(), now())
    </insert>

    <!-- 通过维修记录 ID 删除宿舍维修记录 -->
    <delete id="deleteDormRepair" parameterType="Integer">
        delete from d_dormrepair where r_id=#{r_id}
    </delete>

    <!-- 根据维修记录 ID 查询单个宿舍维修记录 -->
    <select id="findDormRepairById" parameterType="Integer" resultType="DormRepair">
        select * from d_dormrepair where r_id=#{r_id}
    </select>

    <!-- 查询所有宿舍维修记录 -->
    <select id="getAll" resultType="DormRepair">
        select * from d_dormrepair;
    </select>

    <!-- 修改宿舍维修记录 -->
    <update id="updateDormRepair" parameterType="DormRepair">
        update d_dormrepair
        <set>
            <!-- 如果宿舍 ID 不为空，更新宿舍 ID -->
            <if test="d_id!=null and d_id!=0">
                d_id=#{d_id},
            </if>
            <!-- 如果宿舍楼名称不为空，更新宿舍楼名称 -->
            <if test="d_dormbuilding !=null and d_dormbuilding !=''">
                d_dormbuilding=#{d_dormbuilding},
            </if>
            <!-- 如果维修名称不为空，更新维修名称 -->
            <if test="r_name !=null and r_name !=''">
                r_name=#{r_name},
            </if>
            <!-- 如果维修原因不为空，更新维修原因 -->
            <if test="reason !=null and reason !=''">
                reason=#{reason},
            </if>
            <!-- 如果更新时间不为空，更新更新时间 -->
            <if test="update_time !=null">
                update_time=now(),
            </if>
        </set>
        <!-- 根据维修记录 ID 更新数据 -->
        where r_id = #{r_id}
    </update>

    <!-- 定义宿舍维修记录的结果映射 -->
    <resultMap type="com.itheima.po.DormRepair" id="cardAndInfo2">
        <!-- 定义主键 r_id -->
        <id property="r_id" column="r_id"/>
        <!-- 映射其他字段 -->
        <result property="d_id" column="d_id"/>
        <result property="d_dormbuilding" column="d_dormbuilding"/>
        <result property="r_name" column="r_name"/>
        <result property="reason" column="reason"/>
        <result property="create_time" column="create_time"/>
        <result property="update_time" column="update_time"/>
    </resultMap>

</mapper>
