工欲善其事必先利其器
要想得数据必先有接口
这篇文章来带大家做后端
看本文之前 需要安装配置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即可
注意 模板得包名改不改都行 建议改成自己的 不然 就 开军舰!!哈哈
改的话 需要修改
注意 你的文件目录
根据你改的包名来修改 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
可测试接口
结尾
除了鉴权外 项目目录以及文件不再变化
代码已github上传
https://github.com/dmhsq/edusys
剩余工作就是编写新增和修改
可自己尝试
大家好,我是代码哈士奇,是一名软件学院网络工程的学生,因为我是“狗”,狗走千里吃肉。想把大学期间学的东西和大家分享,和大家一起进步。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://blog.csdn.net/qq_42027681。
未经本人允许,禁止转载
后续会推出
前端:vue入门 vue开发小程序 等
后端: java入门 springboot入门等
服务器:mysql入门 服务器简单指令 云服务器运行项目
python:推荐不温卜火 一定要看哦
一些插件的使用等
大学之道亦在自身,努力学习,热血青春
如果对编程感兴趣可以加入我们的qq群一起交流:974178910
有问题可以下方留言,看到了会回复哦
转载:https://blog.csdn.net/qq_42027681/article/details/112427892