在线学习平台------手把手教程👈
学生端课程分页查询
sql:
学生登入时,只能看见自己的所属课程,需要关联查询,查出学生对应的课程
SELECT
t2.course_id,
t2.course_name,
t2.course_cover,
t2.teacher_id,
t3.nick_name,
t2.remark
from sys_user t1
LEFT JOIN ms_course t2
on t1.class_id = t2.class_id --通过学生关联课程
LEFT JOIN sys_user t3
on t3.user_id = t2.teacher_id --学生课程信息里还要把教师姓名给查出来
--course表里只有id,需要去关联教师的用户表
实体类
在domain的Vo包下创建stu的包专门放学生模块的Vo
如果在这多创建一级的包,别名包会扫描不出来
所以需要自己去配置扫描包
mapper
//和之前的课程查询差不多,接收分页对象和wrapper对象
Page<StuCoursePageVo> stuPage(@Param("page")Page<StuCoursePageVo> page,
@Param(Constants.WRAPPER)Wrapper wrapper);
xml
<resultMap id="stuPageMap" type="stuCoursePageVo">
<id property="courseId" column="course_id"></id>
<result property="courseName" column="course_name"></result>
<result property="courseCover" column="course_cover"></result>
<!-- <result property="classId" column="class_id"></result>--> <!--这是管理端的课程查询需要的数据 -->
<result property="teacherId" column="teacher_id"></result>
<!-- <result property="className" column="class_name"></result>-->
<result property="teacherName" column="nick_name"></result>
<result property="remark" column="remark"></result>
</resultMap>
<select id="stuPage" resultMap="stuPageMap">
SELECT
t2.course_id,
t2.course_name,
t2.course_cover,
t2.teacher_id,
t3.nick_name,
t2.remark
from sys_user t1
LEFT JOIN ms_course t2
on t1.class_id = t2.class_id --通过学生关联课程
LEFT JOIN sys_user t3
on t3.user_id = t2.teacher_id --学生课程信息里还要把教师姓名给查出来
--course表里只有id,需要去关联教师的用户表
${ew.customSqlSegment} --直接用条件构造器构造,不用写where
</select>
service
Implc
//查询学生端课程详情 @Override public Page<StuCoursePageVo> stuPage(Pager pager, Long teacherId, String courseName) { //课程查询需要一个分页对象 Page<StuCoursePageVo> p = new Page<>(pager.getPageNum(),pager.getPageSize()); //条件构造器来构造where QueryWrapper<StuCoursePageVo> qw = new QueryWrapper<>(); //没被假删的课程 t2是course表 qw.ne("t2.del_flag",2); //t3对应的是用户模块的教师表 qw.eq(teacherId != null,"t3.teacher_id",teacherId); //String类型需要调用StringUtils来判断不为空 qw.like(StringUtils.isNotEmpty(courseName),"t2.course_name",courseName); //针对当前学生用户查询的 qw.eq("t1.user_id", SecurityUtils.getUserId()); //降序排列,最后添加的放在最上面 qw.orderByDesc("t2.create_time"); return msCourseMapper.stuPage(p,qw); }
controller
package com.mashang.elearing.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mashang.elearing.core.TableData;
import com.mashang.elearing.domain.vo.MsCoursePageVo;
import com.mashang.elearing.domain.vo.stu.StuCoursePageVo;
import com.mashang.elearing.service.IMSCourseService;
import com.ruoyi.common.core.page.Pager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "学生端课程模块")
@RestController
@RequestMapping("/student/course")
public class StuCourseController {
//除了控制层是分割开的,其他层可以共用
@Autowired
private IMSCourseService msCourseService;
@ApiOperation("学生课程分页查询")
@GetMapping
//分页需要有一个参数验证@Validated,保证PageNum和PageSize有传
//teacherId和courseName是用来查询的对应信息的,没传默认查所有
public TableData<StuCoursePageVo> list(@Validated Pager pager, Long teacherId, String courseName){
//查询出来的page对象含有所有信息和条数
Page<StuCoursePageVo> page = msCourseService.stuPage(pager, teacherId, courseName);
List<StuCoursePageVo> records = page.getRecords();
long total = page.getTotal();
//分页要查询出所有信息和总条数
return TableData.success(records,total);
}
}
登入不同的账号会查询出不同的课程信息
测试的时候如果觉得麻烦,可以取消掉验证码接口
把这段代码去掉,登入的时候只要传入账号密码就行,不用uuid和code
账号密码登入后得到token,不同的token对应的用户信息不同,条件构造SecruityUtil.getUserId也不一样,查出来的课程自然也不一样