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   } } 

相关内容

热门资讯

玩家爆料开挂app!丹东约战麻... 玩家爆料开挂app!丹东约战麻将多功能开挂app,丹东约战麻将果然真的有开挂app1、下载好丹东约战...
终于清楚辅助软件!丰城棋牌多功... 终于清楚辅助软件!丰城棋牌多功能辅助软件,丰城棋牌本来是真的有辅助软件1、起透看视 丰城棋牌辅助软件...
重大消息透视器方法!科尔沁麻将... 重大消息透视器方法!科尔沁麻将多功能透视器方法,科尔沁麻将本来是有透视器方法科尔沁麻将脚本下载中分为...
分享个大家辅助方法!天津麻将多... 分享个大家辅助方法!天津麻将多功能辅助方法,天津麻将竟然是真的有辅助方法1、很好的工具软件,可以解锁...
带你了解外挂攻略!逍遥皖北棋牌... 带你了解外挂攻略!逍遥皖北棋牌多功能外挂攻略,逍遥皖北棋牌总是是有外挂攻略1、在逍遥皖北棋牌插件功能...
热门推荐透视挂攻略!悠乐汇多功... 热门推荐透视挂攻略!悠乐汇多功能透视挂攻略,悠乐汇切实真的有透视挂攻略;1、全新机制【悠乐汇ai辅助...
推荐一款辅助方法!科尔沁麻将多... 推荐一款辅助方法!科尔沁麻将多功能辅助方法,科尔沁麻将其实真的有辅助方法1、不需要AI权限,帮助你快...
重大来袭开挂攻略!一乐浙江多功... 重大来袭开挂攻略!一乐浙江多功能开挂攻略,一乐浙江一贯是真的有开挂攻略1、让任何用户在无需一乐浙江安...
详细说明作弊器技巧!启东麻将多... 详细说明作弊器技巧!启东麻将多功能作弊器技巧,启东麻将一贯存在有作弊器技巧1、下载好启东麻将透视辅助...
玩家必看科普辅助插件!闲来互娱... 玩家必看科普辅助插件!闲来互娱多功能辅助插件,闲来互娱一贯有辅助插件1、很好的工具软件,可以解锁游戏...