多模块项目使用springboot框架进行业务处理

项目目录

1、在Result定义返回结果

package com.edu.result;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* @param <T>*/
@Data
public class Result<T> implements Serializable {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result<T> success() {Result<T> result = new Result<T>();result.code = 1;return result;}public static <T> Result<T> success(T object) {Result<T> result = new Result<T>();result.data = object;result.code = 1;return result;}public static <T> Result<T> error(String msg) {Result result = new Result();result.msg = msg;result.code = 0;return result;}}

2、写实体类(entity,和表中的属性一一对应) 

package com.edu.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Class {private String classId;private int classSize;private String headTeacher;private int attendanceTimes;private int focus;
}

3、在(vo)中定义类,写自己想要返回的属性

package com.edu.vo;import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class AbsentStuVo {private String personName;private String studentId;private String classId;private Integer attendanceStatus;private String headTeacher;private String attendRate;
}

3、书写mapper层

package com.edu.mapper;import com.edu.vo.*;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface StudentMapper {/*** 根据学生id显示请假列表* @param studentId* @return*/@Select("select start_time, end_time, reason, leave_status, submit_time from leave_applications where student_id=#{studentId}")List<LeaveApplicationsVo> listLeaveApplications(String studentId);/*** 根据学生id显示迟到列表* @param studentId* @return*/@Select("select  l.late_date,c.course_session,c.course_name , l.teacher,l.entry_time,l.late_duration from late_attendance l left join course c on c.course_id=l.course_id where l.student_id=#{studentId}")List<LateAttendanceVo> listLateAttendance(String studentId);/***根据学生id显示旷课列表* @param studentId* @return*/@Select("select  a.absence_date,a.class_period,u.course_name,a.teacher from absence_record a left join course u on u.course_id=a.course_id where a.student_id=#{studentId}")List<AbsenceRecordVo> listAbsenceRecord(String studentId);/*** 请假列表详情* @param studentId* @return*/@Select("select l.student_id, s.student_name, l.start_time,l.end_time,l.reason,l.leave_status from leave_applications l left join student s on l.student_id=s.student_id where l.student_id=#{studentId}")List<LeaveApplicationsdetailVo> LeaveApplicationsdetail(String studentId);/*** 根据学生id查询该学生各科的缺勤次数* @param studentId* @return*/@Select("SELECT c.course_name, IFNULL(COUNT( DISTINCT a.absent_id), 0) AS absence_count FROM course c LEFT JOIN absent_students a ON c.course_id = a.course_id AND a.student_id = #{studentId} GROUP BY c.course_name")List<CourseAbsenceCountVo> viewAbsenceCountsForSubjects(String studentId);/*** 根据学生id查询学生信息* @param studentId* @return*/@Select("SELECT s.student_id, s.student_name, c.class_name, c.head_teacher," +" (pa.attendance_count /(pa.attendance_count + pa.leave_count+pa.absent_count)) * 100 AS attendance_rate  " +"FROM  student s JOIN  class c ON s.class_id = c.class_id  JOIN personal_attendance pa ON s.student_id = pa.student_id " +"WHERE s.student_id = #{studentId}")List<StudentDetailVO> viewStudentDetail(String studentId);/*** 申请请假* @param studentId 学生id* @param startTime 开始时间* @param endTime 结束时间* @param reason 原因* @return*/@Insert("INSERT INTO leave_applications (student_id, start_time, end_time, reason, submit_time)" +"VALUES (#{studentId}, #{startTime}, #{endTime}, #{reason}, NOW())")Integer insertLeaveRequest(String studentId, String startTime, String endTime, String reason);
}

4、编写service层

package com.edu.service;import com.edu.result.Result;
import com.edu.vo.*;import java.util.List;public interface StudentService {/*** 根据学生id显示请假列表* @param studentId* @return*/List<LeaveApplicationsVo> listLeaveApplications(String studentId);/*** 根据学生id显示迟到列表* @param studentId* @return*/List<LateAttendanceVo> listLateAttendance(String studentId);/*** 根据学生id显示旷课列表* @param studentId* @return*/List<AbsenceRecordVo> listAbsenceRecord(String studentId);/*** 请假列表详情* @param studentId* @return*/List<LeaveApplicationsdetailVo> LeaveApplicationsdetail(String studentId);/*** 根据学生id查询该学生各科的缺勤次数* @param studentId* @return*/List<CourseAbsenceCountVo> viewAbsenceCountsForSubjects(String studentId);/*** 根据学生id查询学生信息* @param studentId* @return*/List<StudentDetailVO> viewStudentDetail(String studentId);/*** 申请请假* @param studentId 学生id* @param startTime 开始时间* @param endTime 结束时间* @param reason 原因* @return*/Result insertLeaveRequest(String studentId, String startTime, String endTime, String reason);}

5、编写service层逻辑

package com.edu.service.Impl;import com.edu.mapper.StudentMapper;
import com.edu.result.Result;
import com.edu.service.StudentService;
import com.edu.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
@Slf4j
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentMapper studentMapper;/*** 根据学生id显示请假列表* @param studentId* @return*/@Overridepublic List<LeaveApplicationsVo> listLeaveApplications(String studentId){return studentMapper.listLeaveApplications(studentId);}/*** 根据学生id显示迟到列表* @param studentId* @return*/@Overridepublic  List<LateAttendanceVo> listLateAttendance(String studentId){return studentMapper.listLateAttendance(studentId);}/*** 根据学生id显示旷课列表* @param studentId* @return*/@Overridepublic  List<AbsenceRecordVo> listAbsenceRecord(String studentId){return studentMapper.listAbsenceRecord(studentId);}/*** 请假列表详情* @param studentId* @return*/@Overridepublic List<LeaveApplicationsdetailVo> LeaveApplicationsdetail(String studentId){return studentMapper.LeaveApplicationsdetail(studentId);}/*** 根据学生id查询该学生各科的缺勤次数* @param studentId* @return*/@Overridepublic List<CourseAbsenceCountVo> viewAbsenceCountsForSubjects(String studentId){return studentMapper.viewAbsenceCountsForSubjects(studentId);}/*** 根据学生id查询学生信息* @param studentId* @return*/@Overridepublic  List<StudentDetailVO> viewStudentDetail(String studentId){return studentMapper.viewStudentDetail(studentId);}/*** 申请请假* @param studentId 学生id* @param startTime 开始时间* @param endTime 结束时间* @param reason 原因* @return*/@Overridepublic Result insertLeaveRequest(String studentId, String startTime, String endTime, String reason){try {int deletedCount = studentMapper.insertLeaveRequest(studentId,startTime,endTime,reason);if (deletedCount == 0) {return Result.error("插入失败");} else {return Result.success("插入成功");}} catch (Exception e) {// 记录异常或进行其他处理return Result.error("插入时发生错误:" + e.getMessage());}}}

6、编写控制层(controller)

package com.edu.controller;import com.edu.result.Result;
import com.edu.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/attendance/student")
@Slf4j
public class StudentController {@Autowiredprivate StudentService studentService;/*** 根据学生id显示请假列表* @param studentId* @return*/@GetMapping("/listLeaveApplications")public Result listLeaveApplications(String studentId)  {return Result.success(studentService.listLeaveApplications(studentId));}/*** 根据学生id显示迟到列表* @param studentId* @return*/@GetMapping("/listLateAttendance")public Result listLateAttendance(String studentId)  {return Result.success(studentService.listLateAttendance(studentId));}/*** 根据学生id显示旷课列表* @param studentId* @return*/@GetMapping("/listAbsenceRecord")public Result listAbsenceRecord(String studentId)  {return Result.success(studentService.listAbsenceRecord(studentId));}/*** 请假列表详情* @param studentId* @return*/@GetMapping("/viewLeaveApplications")public Result LeaveApplicationsdetail(String studentId)  {return Result.success(studentService.LeaveApplicationsdetail(studentId));}/*** 根据学生id查询该学生各科的缺勤次数* @param studentId* @return*/@GetMapping("/viewAbsenceCountsForSubjects")public Result viewAbsenceCountsForSubjects(String studentId)  {return Result.success(studentService.viewAbsenceCountsForSubjects(studentId));}/*** 根据学生id查询学生信息* @param studentId* @return*/@GetMapping("/viewStudentDetail")public Result viewStudentDetail(String studentId)  {return Result.success(studentService.viewStudentDetail(studentId));}/*** 申请请假* @param studentId 学生id* @param startTime 开始时间* @param endTime 结束时间* @param reason 原因* @return*/@PostMapping("/insertLeaveRequest")public Result insertLeaveRequest(String studentId, String startTime, String endTime, String reason)  {return Result.success(studentService.insertLeaveRequest(studentId,startTime,endTime,reason));}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615127.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(二十五): 聚酰亚胺光敏PI(PSPI)

聚酰亚胺光敏PI&#xff08;PSPI&#xff09; 聚酰亚胺光敏PI&#xff08;PSPI&#xff09;是一种结合了聚酰亚胺&#xff08;PI&#xff09;的优良物理和化学性能以及光敏材料特性的高端有机材料。在高分子链上&#xff0c;它兼有亚胺环和光敏基因&#xff0c;因此具有优异的热…

蓝桥杯 前一晚总结 模板 新手版

《准备实足&#xff0c;冲冲冲 省一》https://www.yuque.com/lenyan-svokd/hi7hp2/hfka297matrtsxy2?singleDoc# 《准备实足&#xff0c;冲冲冲 省一》 #include<bits/stdc.h> // 包含标准库头文件using namespace std; using ll long long; // 定义 long long 数据类…

防火墙操作!

当小编在Linux服务器上部署好程序以后&#xff0c;但是输入URL出现下述情况&#xff0c;原来是防火墙的原因&#xff01;&#xff01; 下面是一些防火墙操作&#xff01; 为保证系统安全&#xff0c;服务器的防火墙不建议关闭&#xff01;&#xff01; 但是&#xff0c;我们可…

免费ssl证书能一直续签吗?如何获取SSL免费证书?

免费SSL证书是否可以一直续签。我们需要了解SSL证书的基本工作原理。当你访问一个使用HTTPS协议的网站时&#xff0c;该网站实际上在使用一个SSL证书。这个证书相当于一个数字身份证明&#xff0c;它验证了网站的真实性和安全性。而这个证明是由受信任的第三方机构——通常是证…

RestTemplate—微服务远程调用—案例解析

简介&#xff1a;总结来说&#xff0c;微服务之间的调用方式有多种&#xff0c;选择哪种方式取决于具体的业务需求、技术栈和架构设计。RESTful API和HTTP客户端是常见的选择&#xff0c;而Feign和Ribbon等辅助库可以简化调用过程。RPC和消息队列适用于特定的场景&#xff0c;如…

kail渗透工具之nmap的使用方法

准备工作&#xff1a;开启两台虚拟机和一台Windows主机 kail Linux攻击机&#xff1a;192.168.80.131 red hat靶机&#xff1a;192.168.80.129 Windows主机&#xff1a;192.168.252.42 1、nmap扫描工具的简介 nmap是用来探测计算机网络上的主机和服务的一种安全扫描器。为了绘…

mysql查找binlog的删除记录时间

需求&#xff1a;数据库某表的数据没有了&#xff1b;如何找是什么时修改清掉的&#xff1b; 思路&#xff1a; 1. 查代码&#xff0c;找某表的删除接口&#xff0c;分析是在哪里调用&#xff1b;【部分服务log不全】 2. 查服务的log&#xff1b;【部分服务log不全】 3. 查…

JRT多平台初始化程序

这么多年客户端一直只做Windows&#xff0c;所以初始化程序用C#写个Exe&#xff0c;按网站生成的下载清单文件一个个下载和部署客户端环境是可以的。新的由于设计目标就是支持多平台的&#xff0c;所以需要重新考虑初始化设计。 介绍和演示视频 设计目标有以下&#xff1a; 1…

基于SpringBoot的“滴答拍摄影项目”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“滴答拍摄影项目”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 滴答拍摄影项目结构图 管理员登录首页界面图 用…

Qt5 编译 Qt Creator 源码中的 linguist 模块

文章目录 下载 Qt Creator 源码手动翻译多语言自动翻译多语言 下载 Qt Creator 源码 Github: https://github.com/qt/qttools 笔记打算用 Qt 5.12.12 来编译 qt creator-linguist 所以笔者下载的是 tag - 5.12.12 &#xff0c;解压后如下&#xff0c;先删除多余的文件&#xf…

软件杯 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…

动力学-坐标系

文章目录 1 转动坐标系2 运动坐标系3 刚体运动参数• 拉格朗日建立机器人动力学方程需用齐次变换矩阵,计算效率低。优点是可以写成状态方程的形式,便于运用控制方法。 • 牛顿—欧拉动力学方程可得到一组正向和反向递推方程,显著优点是可把驱动力矩的计算时间缩短到可实时控…