在线学习平台-课程分页、用户管理

用户管理

添加功能增强

新增属性

若依里的用户模块(SysUser)是没有课程这一属性的,要实现我们自己的课程分页查询功能

这个位置传入的实体类SysUser要加上classId,记得加上get、set方法

更改sql语句

ctrl + 鼠标左键不断点进去,查看调用位置

加入swagger文档:

package com.ruoyi.web.controller.system.SysUserController加上Api(tags = "用户管理")

在add方法上加ApiOperation("用户添加")

user_name是账号,nick_name才是昵称

所需参数

修改功能增强

和添加操作一样,需要在sql语句那边加上classId属性

查询功能

修改之前要写上先写查询功能

也和添加操作一样,一直点到sql语句的位置

课程模块:

班级名称和教师名称是采用关联的方式得到

 前期准备:

先在domain自动生成实体类MsCourse

用lombok代替get、set方法,数据类型都改成包装类

设置实体类的自动递增、主键、自动填充

package com.mashang.elearing.domain;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.util.Date;@Data
public class MsCourse {@TableId(type = IdType.AUTO)private Long courseId;private String courseName;private String courseCover;private Long classId;private Long teacherId;private String delFlag;@TableField(fill = FieldFill.INSERT)private String createBy;@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private String updateBy;@TableField(fill = FieldFill.INSERT_UPDATE)//设置返回格式@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;private String remark;}

分页查询课程

 先在package com.mashang.elearing.domain.vo;生成对应的Vo
package com.mashang.elearing.domain.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@ApiModel("查询课程分页")
@Data
public class MsCoursePageVo {@ApiModelProperty("课程id")private Long courseId;@ApiModelProperty("课程名称")private String courseName;@ApiModelProperty("课程封面")private String courseCover;@ApiModelProperty("班级id")private Long classId;@ApiModelProperty("班级名称")private String className;@ApiModelProperty("教师名称")private String teacherName;@ApiModelProperty("教师id")private Long teacherId;@ApiModelProperty("备注")private String remark;}

因为是关联查询,不能用MyBatis-Plus,只能老实用MyBatis

package com.mashang.elearing.mapper;在这个位置建一个接口MsCourseMapper

在resources下面建一个文件夹(directory)mapper,在mapper下建一个xml-MsCourseMapper,这一个xml里面要绑定上面的MsCourseMapper

第一步:

        在package com.mashang.elearing.mapper里继承BaseMapper<MsCourse>,再写一个方法

//分页需要传入page对象和条件构造器对象,两个参数要用@Param区别,// 导入的都是mybatis-plus里的对象//@Param是导自于ibatis里的Page<MsCoursePageVo> page(@Param("page")Page<MsCoursePageVo> page,@Param(Constants.WRAPPER)Wrapper wrapper);

 第二步:

        去对应的xml实现这个方法

第三步

        在service层建一个 IMsCourseService 继承 IService<MsCourse>

        在serivce层下的impl包下建一个MsCourseServiceImpl 继承(extends) ServiceImpl<MsCouseMapper,MsCourse> 再 实现自己的 IMsCourseService接口

第四步

        在IMsCourseSerive写上对应的方法

    //Pager里面放了 pageNum,和pageSize,支持通过教师id和名称来搜索//教师id是用下拉框来实现的//班级名称是用模糊查询来实现的Page<MsCoursePageVo> page(Pager pager,Long teacherId,String courseName);

第五步

        去MsCourseServiceImpl去实现这个方法

        记得要注入Mapper层的对象

 @Autowiredprivate MsCourseMapper msCourseMapper;@Overridepublic Page<MsCoursePageVo> page(Pager pager, Long teacherId, String courseName) {//拿到page对象Page<MsCoursePageVo> p = new Page<>(pager.getPageNum(),pager.getPageSize());//拿到构造器对象,这里只能用普通的QueryWrapper//关联查询不能使用lamdaQueryWrapperQueryWrapper<MsCoursePageVo> qw = new QueryWrapper<>();qw.ne("t1.del_flag",2);qw.eq(teacherId != null,"t1.teacher_id",teacherId);qw.like(StringUtils.isNotEmpty(courseName),"t1.course_name",courseName);qw.orderByDesc("t1.create_time");//page方法需要一个page对象和条件构造器对象return msCourseMapper.page(p,qw);}

        按降序排列,把新增二点放在最前面

第六步:

        创建控制层MsCourseController,控制层上记得写上@Api和@ApiOperation

        固定写法@RestController和@RequestMapping("/course")记得写上

        然后注入的是IMsCourseService

 //这里注入的是Service层的那个接口@Autowiredprivate IMSCourseService msCourseService;@ApiOperation("分页查询")@GetMapping("/list")//TableData是用来返回分页数据的//@Validated参数验证,分页页码和条数必填public TableData<MsCoursePageVo> page(@Validated Pager pager, Long teacherId, String courseName){//msCourseService.page返回的是一个分页的Page对象Page<MsCoursePageVo> page = msCourseService.page(pager, teacherId, courseName);//注意这里返回的是集合List<MsCoursePageVo> records = page.getRecords();long total = page.getTotal();return TableData.success(records,total);}

 添加接口

课程需要courseCover、courseName、classId、teacherId(下拉框)

设置要添加的的参数实体类

在params包下创建添加的实体类

com.mashang.elearing.domain.params.course;
package com.mashang.elearing.domain.params.course;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;@ApiModel("课程添加参数")
@Data
public class MsCourseCreate {//课程Id可以在设置自动递增,courseId不用填@ApiModelProperty(value = "课程名称",required = true)   //这里的required只是建议@NotBlank(message = "课程名称不能为空")     //这里的NotBlank是必须的private String courseName;//NotBlank一般用于字符串//NotNull一般用于 Long@ApiModelProperty(value = "课程封面",required = true)@NotBlank(message = "封面不能为空")private String courseCover;@ApiModelProperty(value = "班级id",required = true)@NotNull(message = "班级id不能为空")private Long classId;@ApiModelProperty(value = "教师id",required = true)@NotNull(message = "教师id不能为null")private Long teacherId;@ApiModelProperty("备注")private String remark;}

添加调用的是save方法,传入的是MsCourse,需要将MsCourseCreate转成MsCourse

传参转化

在com.mashang.elearing.mapping包下建一个接口MsCourseMapping
MsCourseMapping INSTANCE = Mappers.getMapper(MsCourseMapping.class);List<MsClassPageVo> to(List<MsClass> msClasses);

代码

@ApiOperation("课程添加")@PostMappingpublic Result create(@RequestBody @Validated MsCourseCreate courseCreate){MsCourse msCourse = MsCourseMapping.INSTANCE.to(courseCreate);return Result.to(msCourseService.save(msCourse));}

修改接口

修改相较于添加,要多传入一个课程Id,courseId为主键

        设置要修改的参数实体类

        赋值添加接口的传参,在com.mashang.elearing.domain.params.course这个这个位置创建一个

MsCourseUpdate实体类,加上课程Id,其他和添加接口一致

        传参转化

        MsCourse to(MsCourseUpdate update);

        代码

@ApiOperation("课程修改")@PutMapping//Json的形式传、并且需要参数验证public Result update(@RequestBody @Validated MsCourseUpdate update){MsCourse msCourse = MsCourseMapping.INSTANCE.to(update);return Result.to(msCourseService.updateById(msCourse));}

删除接口 

删除采用的是假山,调用的是UpdateById

@ApiOperation("课程删除")@DeleteMapping("/{courseId}")//    @PathVariable参数放在路径上public Result delete(@PathVariable Long courseId){MsCourse msCourse = new MsCourse();msCourse.setCourseId(courseId);msCourse.setDelFlag("2");return Result.to(msCourseService.updateById(msCourse));}

查询详情接口

一些没必要的字段不用查询出来,同样需要转

在com.mashang.elearing.domain.vo创建对应的Vo

package com.mashang.elearing.domain.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@ApiModel("查询课程详情")
@Data
public class MsCourseDtlVo {@ApiModelProperty("课程id")private Long courseId;@ApiModelProperty("课程名称")private String courseName;@ApiModelProperty("课程封面")private String courseCover;@ApiModelProperty("班级id")private Long classId;@ApiModelProperty("班级名称")private String className;@ApiModelProperty("教师名称")private String teacherName;@ApiModelProperty("教师id")private Long teacherId;@ApiModelProperty("备注")private String remark;}

将MsCourse转成MsCourseDtlVo

MsCourseDtlVo to(MsCourse msCourse);

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

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

相关文章

华为数通---配置本地端口镜像示例(1:1)

镜像概念 定义 镜像是指将指定源的报文复制一份到目的端口。指定源被称为镜像源&#xff0c;目的端口被称为观察端口&#xff0c;复制的报文被称为镜像报文。 镜像可以在不影响设备对原始报文正常处理的情况下&#xff0c;将其复制一份&#xff0c;并通过观察端口发送给监控…

Day34 贪心03

Day34 贪心03 1005.K次取反后最大化的数组和 先pass

Linux主机自动注册NPS客户端(脚本化)

参考官方对API使用方法的定义:https://ehang-io.github.io/nps/#/ 1、首先必须要在配置文件中开启 auth_key 并配置一个合适的密钥 2、修改脚本中的可变量参数,以适配自己的环境 #!/bin/bash# 脚本名称:npc_create.sh # 编写人:清瞳清 # 编写时间:2023-12-10 # 描述:这…

neuq-acm预备队训练week 8 P4779 【模板】单源最短路径(标准版)

题目背景 题目限制 题目描述 给定一个 n 个点&#xff0c;m 条有向边的带非负权图&#xff0c;请你计算从 s 出发&#xff0c;到每个点的距离。 数据保证你能从 s 出发到任意点。 输入格式 第一行为三个正整数n,m,s。 第二行起 m 行&#xff0c;每行三个非负整数 ui​,vi​…

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络…

口袋参谋:如何对订单实现一键批量插旗?

​在淘宝店铺运营中&#xff0c;对宝贝订单标注插旗&#xff0c;也算是常态了&#xff0c;至少90%的商家都不陌生&#xff0c;剩下的10%是刚入行的新手&#xff0c;正如我刚入行一样。 01 首先我们要了解什么是插旗&#xff1f; 其实就是淘宝店铺利用各种颜色的旗子来代表订单…

uniapp - 简单版本自定义tab栏切换

tab切换是APP开发最常见的功能之一&#xff0c;uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言&#xff0c;使用tabbar组件非常方便快捷&#xff0c;可以快速实现底部导航栏的效果。对于比较复杂的页面&#xff0c;我们可以使用tab组件自由定义样式和内容 目录…

Redis为什么是单线程的?

Redis为什么是单线程的&#xff1f; 1.代码更清晰&#xff0c;处理逻辑更简单&#xff1b; 不2.用考虑各种锁的问题&#xff0c;不存在加锁和释放锁的操作&#xff0c;没有因为可能出现死锁而导致的性能问题&#xff1b; 3.不存在多线程切换而消耗CPU&#xff1b; 4.无法发挥多…

微服务学习:Nacos配置中心

先打开Nacos&#xff08;详见微服务学习&#xff1a;Nacos微服务架构中的服务注册、服务发现和动态配置&Nacos下载&#xff09; 1.环境隔离&#xff1a; 新建命名空间&#xff1a; 记住命名空间ID&#xff1a; c82496fb-237f-47f7-91ed-288a53a63324 再配置 就可达成环…

Idea spring项目中 resource图标错误解决方案

1.resources错误显示示例 2.resources正确显示示例 3.解决方案 第一步&#xff1a; 第二步&#xff1a; 点击完成即可。

柔性数组

文章目录 1&#xff0c;介绍柔性数组2&#xff0c;柔性数组的使用3&#xff0c;对比另一种实现方法4&#xff0c;结尾 1&#xff0c;介绍柔性数组 柔性数组是一种可变大小的数组&#xff0c;即他可以在你使用的时候根据你的需要变大或者变小&#xff0c;在C99标准下支持这样一…

给你的Python程序添点Emoji魔法:使用Emoji模块增添趣味和个性!

当你想给你的Python程序增添一些趣味和个性时&#xff0c;Emoji模块是一个很有用的工具。Emoji模块允许你在Python中使用各种表情符号&#xff0c;从笑脸到动物&#xff0c;甚至是食物和天气等。在本篇博客中&#xff0c;我们将介绍如何在Python中使用Emoji模块&#xff0c;并展…