SpringCloud+Vue3多对多,多表联查
创始人
2024-11-18 00:06:53
0

♥️作者:小宋1021
🤵‍♂️个人主页:小宋1021主页
♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!
🎈🎈加油! 加油! 加油! 加油
🎈欢迎评论 💬点赞👍🏻 收藏 📂加关注+!


目录

后端

实体类:

CancleClassRespVO

controller

CancleClassMapper

xml文件

CancleClassService

实现类

前端

index.vue

ClassCkeck.vue

index.ts(api)

axios.index.ts


目的:多表联查

数据库:学员表(study_student) 字段:学生姓名(sts_student_name)、手机号(sts_phone)

班级管理(teach_class_manage)字段:班级名称(teach_class_manage)、id(id)

教师管理(hr_teacher_manage)字段:教师姓名(teacher_name)

课程管理(teach_course_manage)字段 :课程名称(course_name)

中间表:

班级管理-关联课程教师(teach_class_manage_course) 字段:class_id、course_id、teacher_id

班级管理-关联学员(teach_class_manage_student) 字段:class_id、student_id

数据关系:班级课程多对多,班级学员多对多

要查出如下字段:

后端

实体类:

package com.todod.education.module.study.dal.dataobject.cancleclass;  import lombok.*; import java.util.*; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import com.todod.education.framework.mybatis.core.dataobject.BaseDO;  /**  * 消课记录 DO  *  * @author 平台管理员  */ @TableName("study_cancle_class") @KeySequence("study_cancle_class_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor public class CancleClassDO extends BaseDO {      /**      * 主键id      */     @TableId     private Long id;     /**      * 学员id      */     private Long studentId;     /**      * 班级id      */     private Long classId;     /**      * 课程id      */     private Long courseId;     /**      * 学员姓名      */     @TableField(exist = false)     private String stsStudentName;     /**      * 手机号      */     @TableField(exist = false)     private String stsPhone;     /**      * 班级名称      */     @TableField(exist = false)     private String className;     /**      * 班级类型      */     @TableField(exist = false)     private String classType;     /**      * 所报课程      */     @TableField(exist = false)     private String courseName;     /**      * 授课教师      */     @TableField(exist = false)     private String teacherName;     /**      * 上课时间      */     private LocalDateTime classTime;      /**      * 消课人      */     private String cancelClassPerson;     /**      * 消课时间      */     private LocalDateTime cancelClassTime;      /**      * 实到人数      */     private Integer arrivedNum;     /**      * 应到人数      */     private Integer arrivingNum;     /**      * 点名操作人员      */     private String rollCallPerson;     /**      * 点名时间      */     private LocalDateTime rollCallTime;     /**      * 操作人      */     private String operaName;     /**      * 操作时间      */     private LocalDateTime operaTime;     /**      * 操作类型      */     private String operaType;     /**      * 操作说明      */     private String operaExplain;  }

CancleClassRespVO

package com.todod.education.module.study.controller.admin.cancleclass.vo;  import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.util.*; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*;  @Schema(description = "管理后台 - 消课记录 Response VO") @Data @ExcelIgnoreUnannotated public class CancleClassRespVO {       @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505")     private Long id;      @Schema(description = "学员id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505")     private Long studentId;      @Schema(description = "班级id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505")     private Long classId;      @Schema(description = "课程id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505")     private Long courseId;      @Schema(description = "学员姓名", example = "芋艿")     private String stsStudentName;      @Schema(description = "手机号")     private String stsPhone;      @Schema(description = "班级名称", example = "李四")     @ExcelProperty("班级名称")     private String className;      @Schema(description = "班级类型", example = "1")     @ExcelProperty("班级类型")     private String classType;      @Schema(description = "所报课程")     @ExcelProperty("所报课程")     private String courseName;      @Schema(description = "上课时间")     @ExcelProperty("上课时间")     private LocalDateTime classTime;      @Schema(description = "授课教师")     @ExcelProperty("授课教师")     private String teacherName;      @Schema(description = "消课人")     @ExcelProperty("消课人")     private String cancelClassPerson;      @Schema(description = "消课时间")     @ExcelProperty("消课时间")     private LocalDateTime cancelClassTime;      @Schema(description = "创建时间")     @ExcelProperty("创建时间")     private LocalDateTime createTime;       @Schema(description = "操作人", example = "王五")     private String operaName;      @Schema(description = "操作时间")     private LocalDateTime operaTime;      @Schema(description = "操作类型", example = "2")     private String operaType;      @Schema(description = "操作说明")     private String operaExplain;        @Schema(description = "实到人数")     private Integer arrivedNum;      @Schema(description = "应到人数")     private Integer arrivingNum;      @Schema(description = "点名操作人员")     private String rollCallPerson;      @Schema(description = "点名时间")     private LocalDateTime rollCallTime; }

controller

 @Tag(name = "管理后台 - 消课记录") @RestController @RequestMapping("/study/cancle-class") @Validated public class CancleClassController {      @Resource     private CancleClassService cancleClassService;      @GetMapping("/get")     @Operation(summary = "获得消课记录")     @Parameter(name = "id", description = "编号", required = true, example = "1024")     @PreAuthorize("@ss.hasPermission('study:cancle-class:query')")     public CommonResult getCancleClass(@RequestParam("id") Long id) {         CancleClassDO cancleClass = cancleClassService.getCancleClass(id);         return success(BeanUtils.toBean(cancleClass, CancleClassRespVO.class));     }      @GetMapping("/findByIds")     public List findUsersByIds(@RequestParam Long id) {         return cancleClassService.selectCheck(id);     }      @GetMapping("/get2")     @Operation(summary = "获得消课记录2")     @Parameter(name = "id", description = "编号", required = true, example = "1024")     @PreAuthorize("@ss.hasPermission('study:cancle-class:query')")     public CommonResult getCancleClass2(@RequestParam("id") Long id) {         CancleClassDO cancleClass = cancleClassService.getCancleClass2(id);         return success(BeanUtils.toBean(cancleClass, CancleClassRespVO.class));     }      @GetMapping("/page")     @Operation(summary = "获得消课记录分页")     @PreAuthorize("@ss.hasPermission('study:cancle-class:query')")     public CommonResult> getCancleClassPage(@Valid CancleClassPageReqVO pageReqVO) {         PageResult pageResult = cancleClassService.getCancleClassPage(pageReqVO);         return success(BeanUtils.toBean(pageResult, CancleClassRespVO.class));     }      @GetMapping("/page2")     @Operation(summary = "获得消课记录分页2")     @PreAuthorize("@ss.hasPermission('study:cancle-class:query')")     public CommonResult> getCancleClassPage2(@Valid CancleClassPageReqVO pageReqVO) {         PageResult pageResult = cancleClassService.getCancleClassPage2(pageReqVO);         return success(BeanUtils.toBean(pageResult, CancleClassRespVO.class));     }  }

CancleClassMapper

package com.todod.education.module.study.dal.mysql.cancleclass;  import java.util.*;  import com.baomidou.mybatisplus.core.metadata.IPage; import com.todod.education.framework.common.pojo.PageResult; import com.todod.education.framework.mybatis.core.query.LambdaQueryWrapperX; import com.todod.education.framework.mybatis.core.mapper.BaseMapperX; import com.todod.education.module.study.controller.admin.entranceexam.vo.EntranceExamPageReqVO; import com.todod.education.module.study.dal.dataobject.cancleclass.CancleClassDO; import com.todod.education.module.study.dal.dataobject.entranceexam.EntranceExamDO; import org.apache.ibatis.annotations.Mapper; import com.todod.education.module.study.controller.admin.cancleclass.vo.*; import org.apache.ibatis.annotations.Param;  /**  * 消课记录 Mapper  *  * @author 平台管理员  */ @Mapper public interface CancleClassMapper extends BaseMapperX {      default PageResult selectPage(CancleClassPageReqVO reqVO) {         return selectPage(reqVO, new LambdaQueryWrapperX()                 .likeIfPresent(CancleClassDO::getClassName, reqVO.getClassName())                 .betweenIfPresent(CancleClassDO::getClassTime, reqVO.getClassTime())                 .betweenIfPresent(CancleClassDO::getCancelClassTime, reqVO.getCancelClassTime())                 .betweenIfPresent(CancleClassDO::getCreateTime, reqVO.getCreateTime())                 .orderByDesc(CancleClassDO::getId));     }      IPage fetchPageResults(IPage page, @Param("queryEntry") CancleClassPageReqVO pageReqVO);      List selectCheck(@Param("id") Long id); }

xml文件

                

CancleClassService

package com.todod.education.module.study.service.cancleclass;  import java.util.*; import jakarta.validation.*; import com.todod.education.module.study.controller.admin.cancleclass.vo.*; import com.todod.education.module.study.dal.dataobject.cancleclass.CancleClassDO; import com.todod.education.framework.common.pojo.PageResult; import com.todod.education.framework.common.pojo.PageParam;  /**  * 消课记录 Service 接口  *  * @author 平台管理员  */ public interface CancleClassService {          /**      * 获得消课记录      *      * @param id 编号      * @return 消课记录      */     CancleClassDO getCancleClass(Long id);      /**      * 获得消课记录      *      * @param id 编号      * @return 消课记录      */     CancleClassDO getCancleClass2(Long id);        /**      * 获得消课记录分页      *      * @param pageReqVO 分页查询      * @return 消课记录分页      */     PageResult getCancleClassPage(CancleClassPageReqVO pageReqVO);      /**      * 获得消课记录分页2      *      * @param pageReqVO 分页查询      * @return 消课记录分页      */     PageResult getCancleClassPage2(CancleClassPageReqVO pageReqVO);      List selectCheck(Long id); }

实现类

package com.todod.education.module.study.service.cancleclass;  import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; import com.mzt.logapi.starter.annotation.LogRecord; import com.todod.education.module.study.controller.admin.monthexam.vo.MonthExamPageReqVO; import com.todod.education.module.study.controller.admin.plan.vo.PlanSaveReqVO; import com.todod.education.module.study.dal.dataobject.monthexam.MonthExamDO; import com.todod.education.module.study.dal.dataobject.plan.PlanDO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional;  import java.util.*; import com.todod.education.module.study.controller.admin.cancleclass.vo.*; import com.todod.education.module.study.dal.dataobject.cancleclass.CancleClassDO; import com.todod.education.framework.common.pojo.PageResult; import com.todod.education.framework.common.pojo.PageParam; import com.todod.education.framework.common.util.object.BeanUtils;  import com.todod.education.module.study.dal.mysql.cancleclass.CancleClassMapper;  import static com.todod.education.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.todod.education.module.study.enums.ErrorCodeConstants.*; import static com.todod.education.module.system.enums.LogRecordConstants.*;  /**  * 消课记录 Service 实现类  *  * @author 平台管理员  */ @Service @Validated public class CancleClassServiceImpl implements CancleClassService {      @Resource     private CancleClassMapper cancleClassMapper;     @Override     public CancleClassDO getCancleClass(Long id) {         return cancleClassMapper.selectById(id);     }      @Override     public CancleClassDO getCancleClass2(Long id) {         return cancleClassMapper.selectById(id);     }      @Override     public PageResult getCancleClassPage(CancleClassPageReqVO pageReqVO) {         return cancleClassMapper.selectPage(pageReqVO);     }      @Override     public PageResult getCancleClassPage2(CancleClassPageReqVO pageReqVO) {         IPage page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());         cancleClassMapper.fetchPageResults(page, pageReqVO);         return new PageResult<>(page.getRecords(), page.getTotal());     }      @Override     public List selectCheck(Long id) {         return cancleClassMapper.selectCheck(id);     } }

前端

index.vue

    

ClassCkeck.vue

   

index.ts(api)

import request from '@/config/axios'  // 消课记录 VO export interface CancleClassVO {   id: number // 主键id   className: string // 班级名称   classType: string // 班级类型   reportCourse: string // 所报课程   classTime: Date // 上课时间   classTeacher: string // 授课教师   cancelClassPerson: string // 消课人   cancelClassTime: Date // 消课时间   studentName: string // 学员姓名   phone: string // 手机号   arrivedNum: number // 实到人数   arrivingNum: number // 应到人数   rollCallPerson: string // 点名操作人员   rollCallTime: Date // 店面时间   operaName: string // 操作人   operaTime: Date // 操作时间   operaType: string // 操作类型   operaExplain: string // 操作说明 }  // 消课记录 API export const CancleClassApi = {   // 查询消课记录分页   getCancleClassPage: async (params: any) => {     return await request.get({ url: `/study/cancle-class/page`, params })   },      // 查询消课记录分页     getCancleClassPage2: async (params: any) => {       return await request.get({ url: `/study/cancle-class/page2`, params })     },       // 查询消课记录详情   getCancleClass: async (id: number) => {     return await request.get({ url: `/study/cancle-class/get?id=` + id })   },      // 查询消课记录详情     getCancleClass2: async (id: number) => {       return await request.get({ url: `/study/cancle-class/get2?id=` + id })     },    // 查询消课记录详情   getCancleClassDetail: async (id: number) => {    return await request.gets({ url: `/study/cancle-class/findByIds?id=` + id })  },    // 新增消课记录   createCancleClass: async (data: CancleClassVO) => {     return await request.post({ url: `/study/cancle-class/create`, data })   },    // 修改消课记录   updateCancleClass: async (data: CancleClassVO) => {     return await request.put({ url: `/study/cancle-class/update`, data })   },    // 删除消课记录   deleteCancleClass: async (id: number) => {     return await request.delete({ url: `/study/cancle-class/delete?id=` + id })   },    // 导出消课记录 Excel   exportCancleClass: async (params) => {     return await request.download({ url: `/study/cancle-class/export-excel`, params })   }, } 

axios.index.ts

import { service } from './service'  import { config } from './config'  const { default_headers } = config  const request = (option: any) => {   const { url, method, params, data, headersType, responseType, ...config } = option   return service({     url: url,     method,     params,     data,     ...config,     responseType: responseType,     headers: {       'Content-Type': headersType || default_headers     }   }) } export default {   get: async (option: any) => {     const res = await request({ method: 'GET', ...option })     return res.data as unknown as T   },   gets: async (option: any) => {     const res = await request({ method: 'GET', ...option })     return res as unknown as T   },   post: async (option: any) => {     const res = await request({ method: 'POST', ...option })     return res.data as unknown as T   },   postOriginal: async (option: any) => {     const res = await request({ method: 'POST', ...option })     return res   },   delete: async (option: any) => {     const res = await request({ method: 'DELETE', ...option })     return res.data as unknown as T   },   put: async (option: any) => {     const res = await request({ method: 'PUT', ...option })     return res.data as unknown as T   },   download: async (option: any) => {     const res = await request({ method: 'GET', responseType: 'blob', ...option })     return res as unknown as Promise   },   upload: async (option: any) => {     option.headersType = 'multipart/form-data'     const res = await request({ method: 'POST', ...option })     return res as unknown as Promise   },   download1: async (option: any) => {     const res = await request({ method: 'POST', responseType: 'blob', ...option })     return res as unknown as Promise   } } 

相关内容

热门资讯

每日必看推荐测试!(wepok... 每日必看推荐测试!(wepoke)外挂透明挂辅助测试(透视辅助)软件透明挂(2025已更新)(哔哩哔...
重大来袭!wpk模拟器多开,w... 《软件透明挂》是一款多人竞技的辅助透视游戏,你将微扑克对手来到同一个战场,为至高无上的荣耀进行一次自...
十分钟轻量版!(wEpOker... 您好,wepoker这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很多玩家在这...
七分钟ai代打!WPK俱乐部(... 七分钟ai代打!WPK俱乐部(wePOke)外挂透明挂辅助助手,(透视挂)微扑克透明挂(2024已更...
盘点一款(衢州都莱)外挂透明挂... 盘点一款(衢州都莱)外挂透明挂辅助修改器(透视)辅助作弊(2020已更新)(哔哩哔哩);衢州都莱软件...
实测发现安装!(WEPOke)... 您好,WEPOke这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款...
记者揭秘!wepoker怎么破... 您好,wepoker这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在这...
今日科普!(逍遥卡五星)外挂透... 今日科普!(逍遥卡五星)外挂透明挂辅助代打,wpk德州透视辅助,扑克教程(2024已更新)(哔哩哔哩...
1分钟检测!(wEPoker)... 相信很多朋友都在电脑上玩过wepoker吧,但是很多朋友都在抱怨用电脑玩起来不方便。为此小编给大家带...
四分钟插件!Wepoke新版(... 四分钟插件!Wepoke新版(WPk)外挂透明挂辅助安装,(透视挂)微扑克有辅助(2023已更新)(...