在线学习平台-学生端

2023-12-14 15:42:11

? ? ?在线学习平台------手把手教程👈

????????学生端课程分页查询

????????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也不一样,查出来的课程自然也不一样

文章来源:https://blog.csdn.net/2302_76649176/article/details/134990303
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。