Vue+SpringBoot+ElementUI实战学生管理系统-4.后端API编写
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编写的更多相关文章
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑
(1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(一): 搭建基本环境、整合 Swagger、MyBatisPlus、JSR303 以及国际化操作
相关 (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y- ...
- Vue+SpringBoot项目实战(一) 搭建环境
GitHub 地址: https://github.com/dongfanger/sprint-backend https://github.com/dongfanger/sprint-fronten ...
- vue.js+element-ui
git地址:https://github.com/jerry9022/LitAdmin vue.js+element-ui 做后台管理系统 太方便了
- vue+springboot前后端分离实现单点登录跨域问题处理
最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot的.因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统.那就意味着做单点登 ...
- 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚
新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...
- Vue + Element-ui实现后台管理系统(2)---项目搭建 + ⾸⻚布局实现
项目搭建 + ⾸⻚布局实现 上篇对该项目做了个总述 :Vue + Element-ui实现后台管理系统(1) --- 总述 这篇主要讲解 项目搭建 + 后台⾸⻚布局实现 : 整体效果 后台首页按布局一 ...
- Vue Springboot (包括后端解决跨域)实现登录验证码功能详细完整版
利用Hutool 基于Vue.ElementUI.Springboot (跨域)实现登录验证码功能 前言 一.Hutool是什么? 二.下面开始步入正题:使用步骤 1.先引入Hutool依赖 2.控制 ...
- .Net Core+Vue.js+ElementUI 实现前后端分离
.Net Core+Vue.js+ElementUI 实现前后端分离 Tags: Vue 架构 前端采用:Vue.js.Element-UI.axios 后端采用:.Net Core Mvc 本项目是 ...
- 【笔记】vue+springboot前后端分离实现token登录验证和状态保存的简单实现方案
简单实现 token可用于登录验证和权限管理. 大致步骤分为: 前端登录,post用户名和密码到后端. 后端验证用户名和密码,若通过,生成一个token返回给前端. 前端拿到token用vuex和lo ...
随机推荐
- restful-接口风格
- unix domain 与本地本地回环在进程间通信中的差异
前言: 127.0.0.1它是一个私有IP,代表的就是你的本机环回地址,其实本质上是绑定在虚拟网卡loopback上的IP. 在实际应用中,有遇到在使用本地回环做进程间通讯的时候程序阻塞的情况.比如下 ...
- [转帖]History of Unicode Release and Publication Dates
www.unicode.org For ease of reference, this page collects together information about the dates for v ...
- [转帖]Windows下sc create命令行注册服务
https://www.cnblogs.com/li150dan/p/15603149.html 如何将exe注册为windows服务,让其直接从后台运行 方法一:使用windows自带的命令sc,首 ...
- 一键部署Docker中间件简单方法-redis为例
一键部署Docker中间件简单方法-redis为例 背景 想能够快速部署一些中间件. 写文档虽然可以, 但是总会有人问, 能够一键部署应该最好不过. 下载以及导出镜像 docker pull redi ...
- [转帖]iptables规则链执行顺序
https://www.cnblogs.com/yum777/articles/8514636.html iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerout ...
- [转帖]Nginx动静分离详解以及配置
https://developer.aliyun.com/article/885602?spm=a2c6h.24874632.expert-profile.314.7c46cfe9h5DxWK 简介: ...
- 行云部署成长之路--慢SQL优化之旅 | 京东云技术团队
当项目的SQL查询慢得像蜗牛爬行时,用户的耐心也在一点点被消耗,作为研发,我们可不想看到这样的事.这篇文章将结合行云部署项目的实践经验,带你走进SQL优化的奇妙世界,一起探索如何让那些龟速的查询飞 ...
- 使用C#做为游戏开发的服务器语言方案
Scut开源服务器 开源C#/Python/Lua 手游服务器 主页:http://www.scutgame.com/index.html 开源:https://github.com/ScutGame ...
- 释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握
释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握[1.安装部署篇--简洁版],支持Linux/Windows部署安装 效果展示 PaddleNLP Pipel ...