<?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" >
<!-- 定义该映射文件的命名空间，与 StudentCleanDao 接口对应 -->
<mapper namespace="com.itheima.dao.StudentCleanDao" >

    <!-- 分页查询学生卫生记录 -->
    <select id="getStudentCleanList" parameterType="StudentClean" resultType="StudentClean">
        <!-- 查询学生卫生记录表 -->
        select * from d_stgrade
        <where>
            <!-- 根据学生 ID 进行模糊查询 -->
            <if test="s_studentid!=null and s_studentid!=0">
                and s_studentid like '%${s_studentid}%'
            </if>
            <!-- 根据学生姓名进行模糊查询 -->
            <if test="s_name !=null and s_name !=''">
                and s_name like '%${s_name}%'
            </if>
            <!-- 根据宿舍 ID 进行模糊查询 -->
            <if test="s_dormitoryid!=null and s_dormitoryid!=0">
                and s_dormitoryid like '%${s_dormitoryid}%'
            </if>
        </where>
        <!-- 按卫生记录 ID 升序排序 -->
        ORDER BY g_id asc
        <!-- 实现分页功能 -->
        limit #{currentPage}, #{pageSize}
    </select>

    <!-- 查询学生卫生记录总数 -->
    <select id="totalCount" resultType="Integer">
        <!-- 查询学生卫生表中的记录数 -->
        select count(g_id) from d_stgrade
        <where>
            <!-- 根据学生 ID 进行模糊查询 -->
            <if test="s_studentid!=null and s_studentid!=0">
                and s_studentid like '%${s_studentid}%'
            </if>
            <!-- 根据学生姓名进行模糊查询 -->
            <if test="s_name !=null and s_name !=''">
                and s_name like '%${s_name}%'
            </if>
            <!-- 根据宿舍 ID 进行模糊查询 -->
            <if test="s_dormitoryid!=null and s_dormitoryid!=0">
                and s_dormitoryid like '%${s_dormitoryid}%'
            </if>
        </where>
    </select>

    <!-- 添加学生卫生记录 -->
    <insert id="addStudentClean" parameterType="StudentClean" keyProperty="g_id" useGeneratedKeys="true">
        <!-- 插入学生卫生信息，包括学生 ID、姓名、卫生评分、班级 ID 和宿舍 ID -->
        insert into d_stgrade (s_studentid, s_name, s_grade, s_classid, s_dormitoryid, create_time, update_time)
        values (#{s_studentid}, #{s_name}, #{s_grade}, #{s_classid}, #{s_dormitoryid}, now(), now())
    </insert>

    <!-- 通过卫生记录 ID 删除学生卫生记录 -->
    <delete id="deleteStudentClean" parameterType="Integer">
        delete from d_stgrade where g_id=#{g_id}
    </delete>

    <!-- 根据卫生记录 ID 查询单个学生卫生记录 -->
    <select id="findStudentCleanById" parameterType="Integer" resultType="StudentClean">
        select * from d_stgrade where g_id=#{g_id}
    </select>

    <!-- 查询所有学生卫生记录 -->
    <select id="getAll" resultType="StudentClean">
        select * from d_stgrade;
    </select>

    <!-- 修改学生卫生记录 -->
    <update id="updateStudentClean" parameterType="StudentClean">
        update d_stgrade
        <set>
            <!-- 如果学生 ID 不为空，更新学生 ID -->
            <if test="s_studentid!=null and s_studentid!=0">
                s_studentid=#{s_studentid},
            </if>
            <!-- 如果学生姓名不为空，更新学生姓名 -->
            <if test="s_name !=null and s_name !=''">
                s_name=#{s_name},
            </if>
            <!-- 如果卫生评分不为空，更新卫生评分 -->
            <if test="s_grade!=null and s_grade!=0">
                s_grade=#{s_grade},
            </if>
            <!-- 如果班级 ID 不为空，更新班级 ID -->
            <if test="s_classid!=null and s_classid!=0">
                s_classid=#{s_classid},
            </if>
            <!-- 如果宿舍 ID 不为空，更新宿舍 ID -->
            <if test="s_dormitoryid!=null and s_dormitoryid!=0">
                s_dormitoryid=#{s_dormitoryid},
            </if>
            <!-- 如果更新时间不为空，更新更新时间 -->
            <if test="update_time != null">
                update_time = now(),
            </if>
        </set>
        <!-- 根据卫生记录 ID 更新数据 -->
        where g_id = #{g_id}
    </update>

    <!-- 定义学生卫生记录的结果映射 -->
    <resultMap type="com.itheima.po.StudentClean" id="cardAndInfo2">
        <!-- 定义主键 g_id -->
        <id property="g_id" column="g_id"/>
        <!-- 映射其他字段 -->
        <result property="s_studentid" column="s_studentid"/>
        <result property="s_name" column="s_name"/>
        <result property="s_grade" column="s_grade"/>
        <result property="s_classid" column="s_classid"/>
        <result property="s_dormitoryid" column="s_dormitoryid"/>
    </resultMap>

</mapper>
