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

    <!-- 分页查询学生信息 -->
    <select id="getStudentList" parameterType="Student" resultType="Student">
        <!-- 查询学生表 -->
        select * from d_student
        <where>
            <!-- 根据学生姓名进行模糊查询 -->
            <if test="s_name!=null and s_name!='' ">
                and s_name like '%${s_name}%'
            </if>
            <!-- 根据学生 ID 进行模糊查询 -->
            <if test="s_studentid!=null and s_studentid!=0">
                and s_studentid like '%${s_studentid}%'
            </if>
            <!-- 根据班级 ID 进行模糊查询 -->
            <if test="s_classid!=null and s_classid!=0">
                and s_classid like '%${s_classid}%'
            </if>
            <!-- 根据班级名称进行模糊查询 -->
            <if test="s_classname!=null and s_classname!='' ">
                and s_classname like '%${s_classname}%'
            </if>
        </where>
        <!-- 按学生 ID 升序排序 -->
        ORDER BY s_id asc
        <!-- 实现分页功能 -->
        limit #{currentPage}, #{pageSize}
    </select>

    <!-- 查询学生表中记录的总数 -->
    <select id="totalCount" resultType="Integer">
        <!-- 计算学生记录总数 -->
        select count(s_studentid) from d_student
        <where>
            <!-- 根据学生姓名进行模糊查询 -->
            <if test="s_name!=null and s_name!='' ">
                and s_name like '%${s_name}%'
            </if>
            <!-- 根据学生 ID 进行模糊查询 -->
            <if test="s_studentid!=null and s_studentid!=0">
                and s_studentid like '%${s_studentid}%'
            </if>
            <!-- 根据班级 ID 进行模糊查询 -->
            <if test="s_classid!=null and s_classid!=0">
                and s_classid like '%${s_classid}%'
            </if>
            <!-- 根据班级名称进行模糊查询 -->
            <if test="s_classname!=null and s_classname!='' ">
                and s_classname like '%${s_classname}%'
            </if>
        </where>
    </select>

    <!-- 通过学生 ID 删除学生信息 -->
    <delete id="deleteStudent" parameterType="Integer">
        delete from d_student where s_id=#{s_id}
    </delete>

    <!-- 添加学生信息 -->
    <insert id="addStudent" parameterType="Student" keyProperty="s_id" useGeneratedKeys="true">
        <!-- 插入学生信息，包括学生 ID、姓名、性别、年龄、电话、班级 ID、班级名称和宿舍 ID -->
        insert into d_student (s_studentid, s_name, s_sex, s_age, s_phone, s_classid, s_classname, s_dormitoryid)
        values (#{s_studentid}, #{s_name}, #{s_sex}, #{s_age}, #{s_phone}, #{s_classid}, #{s_classname}, #{s_dormitoryid})
    </insert>

    <!-- 根据学生 ID 查询学生信息 -->
    <select id="findStudentById" parameterType="Integer" resultType="Student">
        select * from d_student where s_id=#{s_id}
    </select>

    <!-- 修改学生信息 -->
    <update id="updateStudent" parameterType="Student">
        update d_student
        <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_sex !=null and s_sex !=''">
                s_sex=#{s_sex},
            </if>
            <!-- 如果年龄不为空，更新年龄 -->
            <if test="s_age !=null and s_age !=0">
                s_age=#{s_age},
            </if>
            <!-- 如果电话不为空，更新电话 -->
            <if test="s_phone !=null and s_phone !=0">
                s_phone=#{s_phone},
            </if>
            <!-- 如果班级 ID 不为空，更新班级 ID -->
            <if test="s_classid!=null and s_classid!=0">
                s_classid=#{s_classid},
            </if>
            <!-- 如果班级名称不为空，更新班级名称 -->
            <if test="s_classname !=null and s_classname !=''">
                s_classname=#{s_classname},
            </if>
            <!-- 如果宿舍 ID 不为空，更新宿舍 ID -->
            <if test="s_dormitoryid!=null and s_dormitoryid!=0">
                s_dormitoryid=#{s_dormitoryid},
            </if>
        </set>
        <!-- 根据学生 ID 更新记录 -->
        where s_id = #{s_id}
    </update>

    <!-- 查询所有学生信息 -->
    <select id="getAll" resultType="Student">
        select * from d_student;
    </select>

</mapper>
