班级管理

条件分页查询接口(难)

首先查看接口文档了解请求方式,路径还有参数

准备对应的Controller层,Service,Mapper层

Controller:

@RestController注解含@Controller说明为controller,@ResponseBody把结果封装成json,参数声明一个类来接受前端参数

把需要的参数封装成一个类,因需要把前端传过来的String类型转换成LocalDate类型需要@DateTimeFormat

观察响应格式,知道需要返回两个参数total,rows与PageHelper插件相关,利用之前写好的类来封装

total保存数据量

rows封装数据集合,这里就封装班级信息的集合

!

Service层

ClazzService接口,ClazzServiceImpl实现类(@service)

因为要给controller层返回PageResult形式,则需要获得total,和rows。

通过clazzMapper返回一个集合,再把集合强转为Page方法来调用getToal,getResult来获得两个参数进行返回。

studentsQueryParam.getPage():指定当前页码(从1开始)studentsQueryParam.getPageSize():指定每页显示的记录数

Mapper层

ClazzMapper(@Mapper)

XML:同包同名的xml文件

由AI生成sql语句

注意XML里不允许直接用<>=等符号要用

<select id="queryClazzs" resultType="org.example.pojo.Clazz">
    SELECT
    c.id,
    c.name,
    c.room,
    c.begin_date      ,
    c.end_date        ,
    c.master_id ,
    e.name            AS masterName,
    c.subject,
    c.create_time ,
    c.update_time ,
​
    CASE
    WHEN CURDATE() &gt;  c.end_date THEN '已结课'
    When CURDATE() &lt; c.begin_date then '未开班'
    ELSE '在读中'
    END AS status
​
    FROM clazz c
    LEFT JOIN emp e ON c.master_id = e.id
​
    <where>
        <if test="name != null and name != ''">
            AND c.name LIKE CONCAT('%', #{name}, '%')
        </if>
​
        <if test="subject != null">
            AND c.subject = #{subject}
        </if>
​
        <if test="beginDate != null and endDate != null">
            AND c.begin_date between #{beginDate} and #{endDate}
        </if>
    </where>
​
    ORDER BY c.update_time DESC
</select>

返回Clazz组成的集合。

则在Mapper层就返回List<Clazz>

查询所有员工接口

Controller层:

参考响应结果和请求路径,响应json格式由@RequestMapping负责

Service层

创建接口

依次实现

Mapper层

需要返回List<Emp>类型

XML映射

新增班级信息接口

接口文档:

确定请求路径和方式:@PostMapping

提前准备好sql语句

Controller层

因需要接受json格式且请求头为Post的参数

需要@RequestBody

Service层

因不需要返回特殊值直接void实现就好了

这里注意到界面有最后修改时间,所以补全内容

Mapper层

XML映射时因传入的是clazz对象,要把准备好的sql语句values改为对应的变量名才能对应

根据ID查询班级接口

提前准备sql阅读接口文档,确定get请求头

确定返回的数据为Clazz对象

Controller层

要把路径参数绑定到路径中使用@PathVariable注解

Service层

需要返回Clazz对象,所以直接简单实现

Mapper层

传入一个id,返回Clazz对象

XML

修改班级信息接口

确定请求头,以及参数格式

响应数据

Controller层

因为json格式的参数,所以需要@RequestBody,且返回Result.success();

Service层

没有特别的返回内容,所以void即可

Mapper层

XML层:

if test里是条件。注意update语句格式:update 表名 set 字段 = ()where ...

<update id="update">
    update clazz
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="room != null">
            room = #{room},
        </if>
        <if test="beginDate != null">
            begin_date = #{beginDate},
        </if>
        <if test="endDate != null">
            end_date = #{endDate},
        </if>
        <if test="masterId != null">
            master_id = #{masterId},
        </if>
        <if test="subject != null">
            subject = #{subject},
        </if>
    </set>
    where id = #{id}
</update>

删除班级信息接口(注意Service层的处理)

路径参数就用@PathVariable,且没有特殊返回

Controller层

注意使用@PathVariable把参数和路径参数绑定

Service层(重要)

要求

创建一个自定义异常来处理有学生不能删除的情况其中extends RuntimeException让这个异常用于捕获运行时异常,super(message)让传递的具体错误信息报告给父类RuntimeException

接口

实现类中定义hasStudents方法来判断是否有学生在该班级下,如果有就抛出自定义异常ClazzHasStudentException

在全局处理器类用 @RestControllerAdvice表明是全局处理器

具体的处理方法:

@ExceptionHandler注解,当异常被抛出时就被这个处理器捕获返回给前端

Mapper层

完成查询班级人数的接口和删除接口

XML层

学员管理

准备所有的Controller,Service,ServiceImpl,Mapper,XML

查询所有班级接口

请求头,响应数据

Controller层

Service层

Mapper层

XML

条件分页查询接口

根据参数准备Param类

Controller层

让准备的Param类当参数,根据响应数据使用之前准备好的PageResult类

Service层

设置分页的参数,用一个集合接受查询出来的集合,并强转成Page<Student>来调用方法

Mapper层

XML

因为使用了pageHelper插件所以不需要写偏移量

新增学生信息接口

Post是添加,请求参数是json的数据用RequestBody注解

Controller层

Service层

因为传的参数没有剩余数据,补全

Mapper层

XML

根据ID查询学生接口

Controller层

Service层

Mapper层

XML

修改学生信息接口

请求头put,参数是json数据,返回学生对象

Controller层

接受HTTP请求体中数据映射到参数用@RequestBody注解

Service层

Mapper层

XML

具体: upate 表名 <set>...</set> where

<update id="update">
    UPDATE student
    <set>
        <!-- 更新字段 -->
        <if test="name != null and name != ''">
            name = #{name},
        </if>
        <if test="no != null and no != ''">
            no = #{no},
        </if>
        <if test="gender != null">
            gender = #{gender},
        </if>
        <if test="phone != null and phone != ''">
            phone = #{phone},
        </if>
        <if test="idCard != null and idCard != ''">
            id_card = #{idCard},
        </if>
        <if test="isCollege != null">
            is_college = #{isCollege},
        </if>
        <if test="address != null and address != ''">
            address = #{address},
        </if>
        <if test="degree != null">
            degree = #{degree},
        </if>
        <if test="graduationDate != null">
            graduation_date = #{graduationDate},
        </if>
        <if test="violationCount != null">
            violation_count = #{violationCount},
        </if>
        <if test="violationScore != null">
            violation_score = #{violationScore},
        </if>
        <if test="clazzId != null">
            clazz_id = #{clazzId},
        </if>
        <!-- 最后一个字段不需要逗号 -->
        <if test="updateTime != null">
            update_time = #{updateTime}
        </if>
    </set>
    WHERE id = #{id}
</update>

删除学生信息接口(重点是参数和XML格式控制)

路径参数是数组,delete请求头,响应不需要对象

Controller层

注意因为是传递的学员id数组,我们直接用List集合来封装

Service层

Mapper层

XML层

一定要用open,和close属性来控制格式,不然sql语句会出错会变成 where id in1,2,3正确应该是in(1,2,3)

违纪处理接口

路径参数,用于修改的请求头用put

Controller层

设置正确的请求路径

Service层

Mapper层

XML:

注意,不建议在service里单独增加违纪次数,需要再调用一次update方法才能保存进数据库,建议在xml中直接书写

在service里单独增加违纪次数写法:

学员信息统计

班级人数统计接口开发

get请求头,无参数

根据响应数据创建对应的类,方便返回数据

Controller层

Service层(注意泛型用Object比较方便)

因Mapper返回的是Map构成的集合,所以要把每一个键提出来,值也提出来,然后转换成List集合

Mapper层

XML

学员学历信息统计接口开发

请求头get,无参数

响应的是Map集合

Controller层

Service层

Mapper层

XML

需求:功能完善

删除部门时:如果部门下有员工,则不允许删除该部门,并给前端提示错误信息:对不起,当前部门下有员工,不能直接删除

和删除班级接口类似:创建判断部门下是否有员工的方法,自定义异常,抛出然后用全局处理器捕获

自定义的异常

根据方法判断是否有员工,然后抛出异常

全局处理器捕获

新方法的Mapper层

总结

1.学会了请求头get查询,delete删除,put修改,post新增

2.根据响应数据、参数、sql语句返回的数据,设计每个方法的返回类型

3.XML是在同包同名下能正确映射,若不是就要配置yml文件

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐