1.章节介绍

前一篇介绍了项目的表结构设计,这一篇编写后端API,需要的朋友可以拿去自己定制。:)

2.获取源码

源码是捐赠方式获取,详细请QQ联系我 :)!

3.项目截图

登录页

列表操作

动态图

后端接口设计

登录接口

@RestController
@RequestMapping("/api")
public class LoginController { @Autowired
private UserService userService; @PostMapping("/login")
public Result<LoginInfo> login(@RequestBody User user, HttpSession session){
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("username",user.getUsername());
wrapper.eq("password",user.getPassword());
User entity = userService.getOne(wrapper); if (entity == null){
return ResultUtil.fail("用户名密码错误!");
}
else {
session.setAttribute("user",entity);
LoginInfo loginInfo = new LoginInfo(entity.getUsername(), entity.getNickname(), "eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTAzNDg3MjYsImV4cCI6MTYxMDQzNTEyNn0");
return ResultUtil.ok(loginInfo);
}
} @GetMapping("logout")
public Result<String> logout(HttpServletRequest request){
request.getSession().removeAttribute("user");
return ResultUtil.ok("注销成功");
}
}

用户接口

@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService; @GetMapping("/list")
public Result<IPage<User>> list(@RequestParam(required = false) String query,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(query)){
queryWrapper.like("username",query);
} Page<User> page = new Page<>(pageNo,pageSize); IPage<User> pageResult = userService.page(page, queryWrapper); // 设置总记录数
pageResult.setTotal(userService.count(queryWrapper)); return ResultUtil.ok(pageResult);
} @PostMapping("/removes")
public Result<String> remove(@RequestBody List<Integer> ids){
userService.removeByIds(ids);
return ResultUtil.ok();
} @PostMapping("/remove/{id}")
public Result<String> remove(@PathVariable Integer id){
userService.removeById(id);
return ResultUtil.ok();
} @PostMapping("/modify")
public Result<String> save(@RequestBody User entity){
userService.saveOrUpdate(entity);
return ResultUtil.ok();
} @GetMapping("/{id}")
public Result<User> get(@PathVariable Integer id){
return ResultUtil.ok(userService.getById(id));
} }

院系接口

@RestController
@RequestMapping("/api/dept")
public class DeptController {
@Autowired
private DeptService deptService; @GetMapping("/listAll")
public Result<List<Dept>> listAll(){
List<Dept> list = deptService.list(null);
return ResultUtil.ok(list);
} @GetMapping("/list")
public Result<IPage<Dept>> list(@RequestParam(required = false) String query,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<Dept> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(query)){
queryWrapper.like("dept_name",query);
} Page<Dept> page = new Page<>(pageNo,pageSize); IPage<Dept> pageResult = deptService.page(page, queryWrapper); // 设置总记录数
pageResult.setTotal(deptService.count(queryWrapper)); return ResultUtil.ok(pageResult);
} @PostMapping("/removes")
public Result<String> remove(@RequestBody List<Integer> ids){
deptService.removeByIds(ids);
return ResultUtil.ok();
} @PostMapping("/remove/{id}")
public Result<String> remove(@PathVariable Integer id){
deptService.removeById(id);
return ResultUtil.ok();
} @PostMapping("/modify")
public Result<String> save(@RequestBody Dept entity){
deptService.saveOrUpdate(entity);
return ResultUtil.ok();
} @GetMapping("/{id}")
public Result<Dept> get(@PathVariable Integer id){
return ResultUtil.ok(deptService.getById(id));
} }

专业接口

@RestController
@RequestMapping("/api/major")
public class MajorController {
@Autowired
private MajorService majorService; @GetMapping("/list")
public Result<IPage<Major>> list(@RequestParam(required = false) String query,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<Major> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(query)){
queryWrapper.like("major_name",query);
} Page<Major> page = new Page<>(pageNo,pageSize); IPage<Major> pageResult = majorService.listPage(page, query); // 设置总记录数
pageResult.setTotal(majorService.count(queryWrapper)); return ResultUtil.ok(pageResult);
} @PostMapping("/removes")
public Result<String> remove(@RequestBody List<Integer> ids){
majorService.removeByIds(ids);
return ResultUtil.ok();
} @PostMapping("/remove/{id}")
public Result<String> remove(@PathVariable Integer id){
majorService.removeById(id);
return ResultUtil.ok();
} @PostMapping("/modify")
public Result<String> save(@RequestBody Major entity){
majorService.saveOrUpdate(entity);
return ResultUtil.ok();
} @GetMapping("/{id}")
public Result<Major> get(@PathVariable Integer id){
return ResultUtil.ok(majorService.getById(id));
}
}

班级接口

@RestController
@RequestMapping("/api/grade")
public class GradeController {
@Autowired
private GradeService gradeService; @GetMapping("/listAll")
public Result<List<Grade>> listAll(){
return ResultUtil.ok(gradeService.list(null));
} @GetMapping("/list")
public Result<IPage<Grade>> list(@RequestParam(required = false) String query,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<Grade> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(query)){
queryWrapper.like("grade_name",query);
} Page<Grade> page = new Page<>(pageNo,pageSize); IPage<Grade> pageResult = gradeService.listPage(page, query); // 设置总记录数
pageResult.setTotal(gradeService.count(queryWrapper)); return ResultUtil.ok(pageResult);
} @PostMapping("/removes")
public Result<String> remove(@RequestBody List<Integer> ids){
gradeService.removeByIds(ids);
return ResultUtil.ok();
} @PostMapping("/remove/{id}")
public Result<String> remove(@PathVariable Integer id){
gradeService.removeById(id);
return ResultUtil.ok();
} @PostMapping("/modify")
public Result<String> save(@RequestBody Grade entity){
gradeService.saveOrUpdate(entity);
return ResultUtil.ok();
} @GetMapping("/{id}")
public Result<Grade> get(@PathVariable Integer id){
return ResultUtil.ok(gradeService.getById(id));
} }

教师接口

@RestController
@RequestMapping("/api/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService; @GetMapping("/listAll")
public Result<List<Teacher>> listAll(){
List<Teacher> list = teacherService.list(null);
return ResultUtil.ok(list);
} @GetMapping("/list")
public Result<IPage<Teacher>> list(@RequestParam(required = false) String query,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(query)){
queryWrapper.like("teacher_name",query);
} Page<Teacher> page = new Page<>(pageNo,pageSize); IPage<Teacher> pageResult = teacherService.page(page, queryWrapper); // 设置总记录数
pageResult.setTotal(teacherService.count(queryWrapper)); return ResultUtil.ok(pageResult);
} @PostMapping("/removes")
public Result<String> remove(@RequestBody List<Integer> ids){
teacherService.removeByIds(ids);
return ResultUtil.ok();
} @PostMapping("/remove/{id}")
public Result<String> remove(@PathVariable Integer id){
teacherService.removeById(id);
return ResultUtil.ok();
} @PostMapping("/modify")
public Result<String> save(@RequestBody Teacher entity){
teacherService.saveOrUpdate(entity);
return ResultUtil.ok();
} @GetMapping("/{id}")
public Result<Teacher> get(@PathVariable Integer id){
return ResultUtil.ok(teacherService.getById(id));
}
}

学生接口

@RestController
@RequestMapping("/api/student")
public class StudentController {
@Autowired
private StudentService studentService; @Autowired
private GradeService gradeService; @GetMapping("/list")
public Result<IPage<Student>> list(@RequestParam(required = false) String query,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(query)){
queryWrapper.like("student_name",query);
} Page<Student> page = new Page<>(pageNo,pageSize); IPage<Student> pageResult = studentService.listPage(page, query); // 设置总记录数
pageResult.setTotal(studentService.count(queryWrapper)); return ResultUtil.ok(pageResult);
} @PostMapping("/removes")
public Result<String> remove(@RequestBody List<Integer> ids){
studentService.removeByIds(ids);
return ResultUtil.ok();
} @PostMapping("/remove/{id}")
public Result<String> remove(@PathVariable Integer id){
studentService.removeById(id);
return ResultUtil.ok();
} @PostMapping("/modify")
public Result<String> save(@RequestBody Student entity){
studentService.saveOrUpdate(entity);
return ResultUtil.ok();
} @GetMapping("/{id}")
public Result<Student> get(@PathVariable Integer id){
return ResultUtil.ok(studentService.getById(id));
} //接受文件上传
@RequestMapping("/upload")
@ResponseBody
public Result<String> uploadFile(MultipartFile file, HttpServletResponse response) {
//解析excel文件
List<ArrayList<String>> rows = ExcelUtil.analysis(file);
List<Student> list = new ArrayList<>();
if(rows.size()>0){
//2.插入数据
Student entity = null;
int size=0;
String gradeName; // 班级名称
Integer gradeId;
for (int i = 0;i<rows.size();i++){
entity = new Student();
List<String> row = rows.get(i);
size = row.size(); // 不足9个列的 补全
for (int j = size; j < 9; j++) {
row.add("");
} // 学号
entity.setStudentNo(row.get(0));
// 姓名
entity.setStudentName(row.get(1));
entity.setGender(row.get(2).equals("女")?"F":"M");
entity.setIdno(row.get(3));
entity.setPhone(row.get(4));
entity.setAddress(row.get(5));
gradeName = row.get(6);
gradeId = getGradeIdByName(gradeName);
if(gradeId == null){
continue;
}
entity.setGradeId(gradeId);
entity.setEnrollDate(DateUtil.format(row.get(7),"yyyy-MM-dd"));
entity.setRemark(row.get(8)); list.add(entity);
}
} studentService.saveBatch(list); return ResultUtil.ok("导入成功!");
} /**
* 导出
* @param response
* @throws Exception
*/
@GetMapping("/export")
public void export(HttpServletResponse response) throws Exception{
// 创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建sheet
HSSFSheet sheet = workbook.createSheet("sheet1");
String fileName = "学生列表.xls"; // 设置要导出的文件的名字
// 获取数据集合
List<Student> list = studentService.list(null);
// 生成标题行
HSSFRow row = sheet.createRow(0);
row.createCell(0).setCellValue("序号");
row.createCell(1).setCellValue("学号");
row.createCell(2).setCellValue("姓名");
row.createCell(3).setCellValue("性别");
row.createCell(4).setCellValue("身份证");
row.createCell(5).setCellValue("联系方式");
row.createCell(6).setCellValue("家庭地址");
row.createCell(7).setCellValue("班级");
row.createCell(8).setCellValue("入学日期");
row.createCell(9).setCellValue("备注"); Student entity=null;
for (int i = 0; i < list.size(); i++) {
entity = list.get(i);
row = sheet.createRow(i+1); // 从第2行开始填充数据
// 序号
row.createCell(0).setCellValue(String.valueOf(i+1));
row.createCell(1, CellType.STRING).setCellValue(entity.getStudentNo());
row.createCell(2,CellType.STRING).setCellValue(entity.getStudentName());
row.createCell(3).setCellValue(entity.getGender().equals("F")?"女":"男");
row.createCell(4).setCellValue(entity.getIdno());
row.createCell(5).setCellValue(entity.getPhone());
row.createCell(6).setCellValue(entity.getAddress());
row.createCell(7,CellType.STRING).setCellValue(getGradeNameById(entity.getGradeId()));
row.createCell(8,CellType.STRING).setCellValue(DateUtil.format(entity.getEnrollDate(),"yyyy-MM-dd"));
row.createCell(9).setCellValue(entity.getRemark());
} response.setContentType("application/octet-stream");
response.setHeader("Content-disposition",
"attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
response.flushBuffer(); workbook.write(response.getOutputStream());
} private Integer getGradeIdByName(String gradeName){
QueryWrapper<Grade> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("grade_name", gradeName);
Grade one = gradeService.getOne(queryWrapper);
if(one == null){
return null;
}else{
return one.getId();
}
} private String getGradeNameById(Integer gradeId){
Grade one = gradeService.getById(gradeId);
if(one == null){
return null;
}else{
return one.getGradeName();
}
} }

Vue+SpringBoot+ElementUI实战学生管理系统-4.后端API编写的更多相关文章

  1. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑

    (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...

  2. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(一): 搭建基本环境、整合 Swagger、MyBatisPlus、JSR303 以及国际化操作

    相关 (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y- ...

  3. Vue+SpringBoot项目实战(一) 搭建环境

    GitHub 地址: https://github.com/dongfanger/sprint-backend https://github.com/dongfanger/sprint-fronten ...

  4. vue.js+element-ui

    git地址:https://github.com/jerry9022/LitAdmin vue.js+element-ui 做后台管理系统 太方便了

  5. vue+springboot前后端分离实现单点登录跨域问题处理

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...

  6. 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚

    新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...

  7. Vue + Element-ui实现后台管理系统(2)---项目搭建 + ⾸⻚布局实现

    项目搭建 + ⾸⻚布局实现 上篇对该项目做了个总述 :Vue + Element-ui实现后台管理系统(1) --- 总述 这篇主要讲解 项目搭建 + 后台⾸⻚布局实现 : 整体效果 后台首页按布局一 ...

  8. Vue Springboot (包括后端解决跨域)实现登录验证码功能详细完整版

    利用Hutool 基于Vue.ElementUI.Springboot (跨域)实现登录验证码功能 前言 一.Hutool是什么? 二.下面开始步入正题:使用步骤 1.先引入Hutool依赖 2.控制 ...

  9. .Net Core+Vue.js+ElementUI 实现前后端分离

    .Net Core+Vue.js+ElementUI 实现前后端分离 Tags: Vue 架构 前端采用:Vue.js.Element-UI.axios 后端采用:.Net Core Mvc 本项目是 ...

  10. 【笔记】vue+springboot前后端分离实现token登录验证和状态保存的简单实现方案

    简单实现 token可用于登录验证和权限管理. 大致步骤分为: 前端登录,post用户名和密码到后端. 后端验证用户名和密码,若通过,生成一个token返回给前端. 前端拿到token用vuex和lo ...

随机推荐

  1. ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载H264视频流

    前言: RTSP,RTCP,RTP一般是一起使用,在FFmpeg和live555这些库中,它们为了更好的适用性,所以实现起来非常复杂,直接查看FFmpeg和Live555源代码来熟悉这些协议非常吃力, ...

  2. Advanced .Net Debugging 1:你必须知道的调试工具

    一.简介    我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用.他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查.这里的临时性是指,通过 ...

  3. [转帖]堆表(HOT)和索引组织表(IOT)优缺点

      转载于: https://www.ywnds.com/?p=7702 一.堆表和索引组织表 NOTE 堆表也可以称之为 HOT,索引组织表也可以称之为 IOT,下面没有特别说明,两者都是一个意思. ...

  4. [转帖]linux查看端口及端口详解

    https://www.cnblogs.com/the-tops/p/6126941.html   今天现场查看了TCP端口的占用情况,如下图   红色部分是IP,现场那边问我是不是我的程序占用了tc ...

  5. [转帖]【有效解决】Edge浏览器提示你的连接不是专用连接怎么办?

    https://www.xitongzhijia.net/xtjc/20230524/290887.html Win11正式版iso镜像最新(22H2新版) V2023 大小:4.22 GB类别:Wi ...

  6. [转帖]深入理解mysql-第十章 mysql查询优化-Explain 详解(上)

    目录 一.初识Explain 二.执行计划-table属性 三.执行计划-id属性 四.执行计划-select_type属性 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一 ...

  7. 【转帖】数据库篇-MySql架构介绍

    https://zhuanlan.zhihu.com/p/147161770 公众号-坚持原创,码字不易.加微信 : touzinv 关注分享,手有余香~ 本篇咱们也来聊聊mysql物理和逻辑架构,还 ...

  8. 【转帖】3.JVM内存结构概述

    目录 1.JVM内存结构 1.JVM内存结构 在JVM系列的第一篇文章中已经给出了JVM内存结构的简图,下面是JVM内存结构更加详细的图. 同样,JVM的内存结构可以分为上中下3层. 上层主要是类加载 ...

  9. 【转帖】TCP内核参数

    https://www.cnblogs.com/chia/p/7799231.html tcp_syn_retries :INTEGER默认值是5对于一个新建连接,内核要发送多少个 SYN 连接请求才 ...

  10. [转帖]Linux:页表中PGD、PUD、PMD、TLB等概念介绍

    1.PGD: Page Global Directory        Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的.当创建一个新的进程时,都要为新进程 ...