管理系统类毕设(四)---后端搭建详细说明

工欲善其事必先利其器
要想得数据必先有接口
这篇文章来带大家做后端

看本文之前 需要安装配置Java和Maven环境
了解SpringBoot
推荐看这篇文章之前先看
快速搭建一个后台

代码模板 已放置github
https://github.com/dmhsq/easy-Spring-Boot-demo
本文代码 已放置github
https://github.com/dmhsq/edusys

学生管理系统后端开发

  • 搭建项目
    • 下载修改模板
    • 编写实体类(在domain中)
      • 学生类
      • 教师类
      • 考试类
      • 成绩类
    • 编写数据访问层(在dao)
      • 学生数据查询接口
      • 教师数据查询接口
      • 考试数据查询接口
      • 考试成绩数据查询接口
    • 编写业务层(在service)
      • 查询服务QueryService
      • 增加和修改类似
    • 编写接口(在控制层controller)
    • 测试
  • 结尾

搭建项目

快速搭建一个后台

下载修改模板

代码模板 已放置github
https://github.com/dmhsq/easy-Spring-Boot-demo

快速搭建一个后台 文章中已经说明 如何搭建
我们直接拿模板来搭建
管理系统类毕设(四)---后端搭建详细说明_第1张图片下载后 解压
在这里插入图片描述
选择你的解压文件夹 ok即可
管理系统类毕设(四)---后端搭建详细说明_第2张图片

注意 模板得包名改不改都行 建议改成自己的 不然 就 开军舰!!哈哈
改的话 需要修改
在这里插入图片描述
在这里插入图片描述
注意 你的文件目录在这里插入图片描述

管理系统类毕设(四)---后端搭建详细说明_第3张图片

根据你改的包名来修改 HttpAspect文件
以及 SwaggerConfig文件的
在这里插入图片描述

编写实体类(在domain中)

省略的为 属性 get set toString 代码太长 影响观看

学生类

需要 学号,姓名,年级,班级,所属老师,老师手机号,家长,家长手机号,家庭住址
均为String类型 学号可能不是纯数字 比如 YG111111等
学号为主键
记得快捷生成get set toString

package edusys.one.domain;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * @Author: 张灿
 * @Time: 2021/1/6 16:44
 */
@Entity
public class Student {
     

    /**
     * 学号
     */
    @Id
    private String userId;

    /**
     * 姓名
     */
    private String userName;
	省略。。。。。
}

教师类

需要 教师编号,姓名,手机号,家庭住址

教师编号为主键
记得快捷生成get set toString

package edusys.one.domain;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 14:51
 */
@Entity
public class Teacher {
     

    /**
     * 教师编号
     */
    @Id
    private String teacherId;

    /**
     * 教师姓名
     */
    private String teacherName;
	省略。。。。。。
}

考试类

需要 考试编号,考试名,考试年级,考试具体说明,考试日期,考试负责老师

考试编号为主键
记得快捷生成get set toString

package edusys.one.domain;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 15:09
 */
@Entity
public class Exam {
     

    /**
     * 考试编号
     */
    @Id
    private String examId;

    /**
     * 考试名
      */
    private String examName;
	省略。。。。。。
}

成绩类

需要 学号,姓名,班级,考试名,科目成绩

学号为主键
记得快捷生成get set toString

package edusys.one.domain;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 15:22
 */
@Entity
public class Result {
     

    /**
     * 学号
     */
    @Id
    private String userId;
    
    /**
     * 学生姓名
     */
    private String userName;
	省略。。。。。
}

编写数据访问层(在dao)

由于是操作Mysql 每个接口都继承JpaRepository<类名,主键类型>

学生数据查询接口

目前只额外增加了通过学号分页查询
在这里插入图片描述

package edusys.one.dao;

import edusys.one.domain.Student;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @Author: 张灿
 * @Time: 2021/1/6 16:34
 */

public interface StudentRepository extends JpaRepository<Student,String> {
     

    /**
     * 分页模糊查询
     * @param pageable
     * @param string
     * @return Pages
     */
    Page<Student> findAllByUserIdLike(Pageable pageable, String string);

}

教师数据查询接口

暂未添加额外接口
后会添加 通过几个关键属性 分页查询
一般通过老师名/编号查询

package edusys.one.dao;

import edusys.one.domain.Teacher;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 15:33
 */

public interface TeacherRepository extends JpaRepository<Teacher,String> {
     
}

考试数据查询接口

暂未添加额外接口
后会添加 通过几个关键属性 分页查询
一般直接查询 通过日期等等查询

package edusys.one.dao;

import edusys.one.domain.Exam;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 15:35
 */

public interface ExamRepository extends JpaRepository<Exam,String> {
     
}

考试成绩数据查询接口

暂未添加额外接口
后会添加 通过几个关键属性 分页查询
一般为 通过学生名查询 还有班级 等等

package edusys.one.dao;

import edusys.one.domain.Result;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 15:36
 */

public interface ResultRepository extends JpaRepository<Result,String> {
     
}

编写业务层(在service)

主要业务就是 查询 修改 增加
所以 写了三个文件

查询服务QueryService

package edusys.one.service;

import edusys.one.dao.ExamRepository;
import edusys.one.dao.ResultRepository;
import edusys.one.dao.StudentRepository;
import edusys.one.dao.TeacherRepository;
import edusys.one.domain.RespBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

/**
 * @Author: 张灿
 * @Time: 2021/1/10 15:40
 */
@Service
public class QueryService {
     

    @Autowired
    ExamRepository examRepository;

    @Autowired
    ResultRepository resultRepository;

    @Autowired
    StudentRepository studentRepository;

    @Autowired
    TeacherRepository teacherRepository;


    public RespBean find(Integer type,String userId,String userName, String teacherId, String teacherName, String examName, String examDate, String classes, String grade, Integer currentPage, Integer pageSize){
     
        if (currentPage<0){
     
            currentPage = 1;
        }
        Pageable pageable = PageRequest.of(currentPage-1,pageSize);
        Integer zero=0,one=1,two=2,three=3;
        if (type.equals(zero)) {
     return findStudent(pageable,userId,userName,grade);}
        else if (type.equals(one)) {
     return findTeacher(pageable,teacherId,teacherName);}
        else if (type.equals(two)) {
     return findExam(pageable,examName,examName);}
        else if (type.equals(three)) {
     return findResult(pageable,examName,userId,classes);}
        else {
     return RespBean.error("失败","失败");}
    }

    /**
     * 查询学生
     * @param pageable 分页
     * @param userId 学号
     * @param userName 学生名
     * @param grade 年级
     * @return RespBean
     */
    private RespBean findStudent(Pageable pageable,String userId,String userName,String grade){
     
        return RespBean.ok("成功",studentRepository.findAllByUserIdLikeAndUserNameLikeAndGradeLike(pageable,userId+"%",userName+"%",grade+"%"));
    }

    /**
     * 查询老师
     * @param pageable 分页
     * @param teacherId 老师编号
     * @param teacherName 老师名
     * @return RespBean
     */
    private RespBean findTeacher(Pageable pageable,String teacherId,String teacherName){
     
        return  RespBean.ok("成功",teacherRepository.findAllByTeacherIdLikeAndTeacherNameLike(pageable,teacherId+"%",teacherName+"%"));
    }

    /**
     * 查询考试
     * @param pageable 分页
     * @param examName 考试名
     * @param examDate 考试日期
     * @return RespBean
     */
    private RespBean findExam(Pageable pageable,String examName,String examDate){
     
        return  RespBean.ok("成功",examRepository.findAllByExamNameLikeAndExamDateLike(pageable,examName+"%",examDate+"%"));
    }

    /**
     *
     * @param pageable 分页
     * @param examName 考试名
     * @param userId 学号
     * @param classes 班级
     * @return RespBean
     */
    private RespBean findResult(Pageable pageable,String examName,String userId,String classes){
     
        return  RespBean.ok("成功",resultRepository.findAllByExamNameLikeAndUserIdLikeAndClassesLike(pageable,examName+"%",userId+"%",classes+"%"));
    }

}

增加和修改类似

代码不再放上来 和查询类似 文章系列最后一篇发布代码
到现在的代码 以及放置github
链接在文章结尾

编写接口(在控制层controller)

package edusys.one.controller;

import edusys.one.domain.RespBean;
import edusys.one.service.QueryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: 张灿
 * @Time: 2021/1/6 16:30
 */
@CrossOrigin
@RestController
@Api(tags = "接口")
public class EduSysController {
     

    private final static Logger logger = LoggerFactory.getLogger(EduSysController.class);


    @Autowired
    private QueryService queryService;


    @GetMapping("/find")
    @ApiOperation(value = "按页查找所有信息接口(支持模糊查询)",notes = "接口说明:type类型0为学生1为老师2为考试3为成绩," +
            "查询学生需要userId/userName/grade," +
            "查询老师需要teacherId/teacherName," +
            "查询考试需要examName/examDate," +
            "查询成绩需要examName/userId/classes")
    @ApiImplicitParams({
     
            @ApiImplicitParam(name = "type",value = "类型",defaultValue = "0",required = true),
            @ApiImplicitParam(name = "currentPage",value = "当前页",defaultValue = "1"),
            @ApiImplicitParam(name = "pageSize",value = "每页大小",defaultValue = "5"),
            @ApiImplicitParam(name = "userId",value = "学号"),
            @ApiImplicitParam(name = "userName",value = "学生姓名"),
            @ApiImplicitParam(name = "teacherId",value = "教师编号"),
            @ApiImplicitParam(name = "teacherName",value = "教师姓名"),
            @ApiImplicitParam(name = "examName",value = "考试名"),
            @ApiImplicitParam(name = "examDate",value = "考试日期"),
            @ApiImplicitParam(name = "classes",value = "班级"),
            @ApiImplicitParam(name = "grade",value = "年级")
    })
    public RespBean Systest(@RequestParam("type") Integer type,
                            @RequestParam(name = "userId",required = false,defaultValue = "") String userId,
                            @RequestParam(name = "userName",required = false,defaultValue = "") String userName,
                            @RequestParam(name = "teacherId",required = false,defaultValue = "") String teacherId,
                            @RequestParam(name = "teacherName",required = false,defaultValue = "") String teacherName,
                            @RequestParam(name = "examName",required = false,defaultValue = "") String examName,
                            @RequestParam(name = "examDate",required = false,defaultValue = "") String examDate,
                            @RequestParam(name = "classes",required = false,defaultValue = "") String classes,
                            @RequestParam(name = "grade",required = false,defaultValue = "") String grade,
                            @RequestParam(name = "currentPage",required = false,defaultValue = "1") Integer currentPage,
                            @RequestParam(name = "pageSize",required = false,defaultValue = "5") Integer pageSize){
     
        return queryService.find(type,userId,userName,teacherId,teacherName,examName,examDate,classes,grade,currentPage,pageSize);

    }

}

测试

项目运行后在
http://localhost:8086/edusys/swagger-ui.html
可测试接口

管理系统类毕设(四)---后端搭建详细说明_第4张图片

结尾

除了鉴权外 项目目录以及文件不再变化
代码已github上传
https://github.com/dmhsq/edusys
剩余工作就是编写新增和修改
可自己尝试







  大家好,我是代码哈士奇,是一名软件学院网络工程的学生,因为我是“狗”,狗走千里吃肉。想把大学期间学的东西和大家分享,和大家一起进步。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://blog.csdn.net/qq_42027681。

未经本人允许,禁止转载

在这里插入图片描述


后续会推出

前端:vue入门 vue开发小程序 等
后端: java入门 springboot入门等
服务器:mysql入门 服务器简单指令 云服务器运行项目
python:推荐不温卜火 一定要看哦
一些插件的使用等

大学之道亦在自身,努力学习,热血青春
如果对编程感兴趣可以加入我们的qq群一起交流:974178910
在这里插入图片描述

有问题可以下方留言,看到了会回复哦

你可能感兴趣的:(#,从零开始打造毕业设计,java,spring,boot,mysql)