前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >管理系统类毕设(四)---后端搭建详细说明

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

作者头像
代码哈士奇
发布2021-01-26 14:48:36
7720
发布2021-01-26 14:48:36
举报
文章被收录于专栏:dmhsq_csdn_blog

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

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

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

学生管理系统后端开发

搭建项目

快速搭建一个后台

下载修改模板

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

快速搭建一个后台 文章中已经说明 如何搭建 我们直接拿模板来搭建

在这里插入图片描述
在这里插入图片描述

下载后 解压

在这里插入图片描述
在这里插入图片描述

选择你的解压文件夹 ok即可

在这里插入图片描述
在这里插入图片描述

注意 模板得包名改不改都行 建议改成自己的 不然 就 开军舰!!哈哈 改的话 需要修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意 你的文件目录

在这里插入图片描述
在这里插入图片描述
296.png)
296.png)

根据你改的包名来修改 HttpAspect文件 以及 SwaggerConfig文件的

在这里插入图片描述
在这里插入图片描述

编写实体类(在domain中)

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

学生类

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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<类名,主键类型>

学生数据查询接口

目前只额外增加了通过学号分页查询

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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);

}

教师数据查询接口

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

代码语言:javascript
复制
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> {
}

考试数据查询接口

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

代码语言:javascript
复制
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> {
}

考试成绩数据查询接口

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

代码语言:javascript
复制
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 可测试接口

在这里插入图片描述
在这里插入图片描述

结尾

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

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

未经本人允许,禁止转载

在这里插入图片描述
在这里插入图片描述

后续会推出

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

大学之道亦在自身,努力学习,热血青春

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学生管理系统后端开发
  • 搭建项目
    • 下载修改模板
      • 编写实体类(在domain中)
        • 学生类
        • 教师类
        • 考试类
        • 成绩类
      • 编写数据访问层(在dao)
        • 学生数据查询接口
        • 教师数据查询接口
        • 考试数据查询接口
        • 考试成绩数据查询接口
      • 编写业务层(在service)
        • 查询服务QueryService
        • 增加和修改类似
      • 编写接口(在控制层controller)
        • 测试
        • 结尾
        相关产品与服务
        云开发 CloudBase
        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档