信息小管家之学生管理系统
在学习了数据库和Servlet的知识之后,想着写一个项目来练习一下这部分,于是通过学生信息管理系统来完成这个任务
项目的主要业务是进行学生信息的管理,包括学生信息的增加,删除,查询,更新
通过前端的请求,后端进行响应,返回JSON格式的数据,然后前端进行解析,显示到页面上.
数据库设计
班级和学生信息表为一对多关系
数据字典表和数据字典标签表为一对多关系
字典表说明
数据字典表和数据字典标签表主要用在一些通用的下拉菜单选项。
如班级表中的字段:学生是哪一届的,学生专业
- 如果单独设计需要单独一张表,实际存放的数据也不会太多,可以考虑设计在整体的一张表。
- 页面上展示时,这些字段也是下拉选项。
- 一般在设计上考虑为两张表:数据字典表和数据字典标签表(一对多关系)来保存。两张表都是key、value的形式,字典表是父节点,字典标签表是子节点,下拉菜单通过父节点的key查询出所有关联的子节点,再使用子节点的key、value进行下拉菜单选项的初始化
接口的的设计:
查询专业字典
GET dict/tag/query?dictionaryKey=000002
查询毕业年份字典
GET dict/tag/query?dictionaryKey=000001
查询学生信息
GET student/query?searchText=&sortOrder=asc&pageSize=7&pageNumber=1&_=1594089188797
查询班级(数据字典)
使用在下拉菜单中,要求按照数据字典响应格式返回
GET classes/queryAsDict
新增学生信息
GET classes/queryAsDict
新增学生信息
POST student/add
Content-Type: application/json
{"studentName":"啊sir","studentNo":"1111","idCard":"32432423","classesId":"2","studentEmail":""}
删除学生信息
GET student/delete?ids=2&ids=3
查询学生详情
GET student/queryById?id=4
修改学生信息
POST student/update
Content-Type: application/json
{"id":"4","studentName":"小小的梦想A4","studentNo":"s00004","idCard":"222222222222222225","classesId":"3","studentEmail":"123@qq.com"}
根据前端的接口来定义后端的Servlet,在实现每个Servlet的doGet方法时候都要设置编码格式,状态码等等一些重复的操作,所以实现一个模板类,减少后面的工作量.根据前端的响应格式,来确定我们后端的响应要发送什么样的.
开发环境配置
通过Maven来构架项目,先完成项目的pom.xml的配置,然后在IDEA中配置数据库
代码设计
设计工具类
设计数据库实体类
设计HTTP请求基类
主要针对前端表格中,可以输入文本搜索,并根据页码显示列表数据
import javax.servlet.http.HttpServletRequest;
/**
* @author PineappleSnow
* @version 1.0
* @date 2020/8/7 20:00
*/
@Getter
@Setter
@ToString
public class Page {
private String searchText;//条件查询的的字段
private String sortOrder;//排序的条件
private Integer pageSize;//每页的数据
private Integer pageNumber;//当前的页码
public static Page parse(HttpServletRequest req) {
Page p = new Page();
p.searchText = req.getParameter("searchText");
p.sortOrder = req.getParameter("sortOrder");
p.pageSize = Integer.parseInt(req.getParameter("pageSize"));
p.pageNumber = Integer.parseInt(req.getParameter("pageNumber"));
return p;
}
}
设计统一响应类
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* @author PineappleSnow
* @version 1.0
* @date 2020/7/26 12:16
*/
@Getter
@Setter
@ToString
public class Response {
private boolean success;//业务是否处理成功
private Integer total;//分页操作时需要的总数量
private String code;//错误码
private String message;//错误消息
private Object data;//业务字段
private String stackTrance;//出现异常时,堆栈信息
}
流程:
- 定义服务路径,请求方法等
- 解析请求数据 通过request.getParameter()和request.getInputStream()来获取数据
- 进行JDBC的操作
- 响应数据的返回,和定义的Java对象的结构要一致
分页功能的实现:
通过给前端返回分页后的数据和总的数量,前端完成处理
过滤器的配置:
通过对session的判断,如果当前没有登录,就重定向到登陆界面,如果当前请求后端非登录接口,在未登录不允许访问的情况下,返回401状态码
项目完整代码:项目代码