• vue springboot mybatis plus 分页


    方式一,自定义sql语句分页

    1、pom依赖版本

    <mybatis-plus.version>3.4.0</mybatis-plus.version>

    2、MyBatisPlusConfig

    package com.stu.service.base.config;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 分页功能
     */
    @Configuration
    @MapperScan("com.stu.service.*.mapper")
    public class MyBatisPlusConfig {
    
        /**
         * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
         */
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
            return interceptor;
        }
    
    
    }

    3、controller方法

    package com.stu.service.edu.controller.admin;
    
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.stu.service.base.result.R;
    import com.stu.service.base.result.ResultCodeEnum;
    import com.stu.service.edu.entity.Course;
    import com.stu.service.edu.entity.CourseDescription;
    import com.stu.service.edu.entity.form.CourseInfoForm;
    import com.stu.service.edu.entity.vo.CoursePublishVo;
    import com.stu.service.edu.entity.vo.CourseQueryVo;
    import com.stu.service.edu.entity.vo.CourseVo;
    import com.stu.service.edu.service.CourseService;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    /**
     * <p>
     * 课程 前端控制器
     * </p>
     *
     * @author stu
     * @since 2022-05-05
     */
    @RestController
    @RequestMapping("/admin/edu/course")
    @CrossOrigin
    public class CourseController {
    
        @Autowired
        private CourseService courseService;
    
        /***********************************
         * 用途说明:更新课程基本信息和课程简介
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @PostMapping("updateCourseForm")
        private R updateCourseForm(@RequestBody CourseInfoForm courseInfoForm) {
    
            //非空判断
            if (null == courseInfoForm || StringUtils.isEmpty(courseInfoForm.getId())) {
                return R.error().message(ResultCodeEnum.PARAM_ERROR.getMessage());
            }
            //更新课程进步信息和课程简介
            boolean updateCourseForm = courseService.updateCourseForm(courseInfoForm);
            if (updateCourseForm) {
                return R.ok();
            } else {
                return R.error().message(ResultCodeEnum.UPDATE_ERROR.getMessage());
            }
    
        }
    
        /***********************************
         * 用途说明:保存课程基本信息和课程简介
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @PostMapping("saveCourseInfo")
        private R saveCourseInfo(@RequestBody CourseInfoForm courseInfoForm) {
            return R.ok().data("data", courseService.saveCourseInfo(courseInfoForm));
        }
    
        /***********************************
         * 用途说明:取得课程的基本信息和课程简介
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @GetMapping("getCourseForm/{courseId}")
        private R getCourseForm(@PathVariable(required = true) String courseId) {
    
            if (StringUtils.isEmpty(courseId)) {
                return R.error().message(ResultCodeEnum.PARAM_ERROR.getMessage());
            }
            CourseInfoForm courseInfoForm = courseService.getCourseForm(courseId);
            if (null == courseInfoForm) {
                return R.error().message(ResultCodeEnum.DATA_NULL.getMessage());
            } else {
                return R.ok().data("data", courseService.getCourseForm(courseId));
            }
    
        }
    
        /***********************************
         * 用途说明:去看发布课程的详情
         * @param courseId
         * 返回值说明:
         * @return com.stu.service.base.result.R
         ***********************************/
        @GetMapping("getPublishCourseByid/{courseId}")
        public R getPublishCourseByid(@PathVariable String courseId) {
            CoursePublishVo coursePublish = courseService.getCoursePublishById(courseId);
            if(null != coursePublish){
                return R.ok().data("data",coursePublish);
            }
            return R.error().message(ResultCodeEnum.DATA_NULL.getMessage());
        }
    
        /***********************************
         * 用途说明:发布课程
         * @param courseId
         * 返回值说明:
         * @return com.stu.service.base.result.R
         ***********************************/
        @GetMapping("publishCourse/{courseId}")
        public R publishCourse(@PathVariable String courseId) {
            boolean result = courseService.publishCourse(courseId);
            if (result) {
                return R.ok();
            }
            return R.error().message(ResultCodeEnum.UPDATE_ERROR.getMessage());
        }
    
        /***********************************
         * 用途说明:分页
         * @param page
         * @param limit
         * @param courseQueryVo
         * 返回值说明:
         * @return com.stu.service.base.result.R
         ***********************************/
        @GetMapping("pageCourses/{page}/{limit}")
        public R pageCourses(@PathVariable Long page, @PathVariable Long limit, CourseQueryVo courseQueryVo) {
            IPage<CourseVo> coursePublishVoIPage = courseService.pageCourses(page, limit, courseQueryVo);
    
            return R.ok().data("data",coursePublishVoIPage);
    
        }
    
        /***********************************
         * 用途说明:根據id刪除課程(包括课时,小节,详情等)
         * @param id
         * 返回值说明:
         * @return com.stu.service.base.result.R
         ***********************************/
        @DeleteMapping("deleteById/{id}")
        public R deleteById(@PathVariable String id) {
            boolean result = courseService.deleteById(id);
            if (result) {
                return R.ok();
            }
            return R.error().message(ResultCodeEnum.UPDATE_ERROR.getMessage());
        }
    
    
    
    }

    4、service接口

    package com.stu.service.edu.service;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.stu.service.edu.entity.Course;
    import com.baomidou.mybatisplus.extension.service.IService;
    import com.stu.service.edu.entity.form.CourseInfoForm;
    import com.stu.service.edu.entity.vo.CoursePublishVo;
    import com.stu.service.edu.entity.vo.CourseQueryVo;
    import com.stu.service.edu.entity.vo.CourseVo;
    
    /**
     * <p>
     * 课程 服务类
     * </p>
     *
     * @author stu
     * @since 2022-05-05
     */
    public interface CourseService extends IService<Course> {
    
        /***********************************
         * 用途说明:保存课程基本信息和课程简介
         * 返回值说明: com.stu.service.edu.entity.Course
         ***********************************/
        Course saveCourseInfo(CourseInfoForm courseInfoForm);
    
        /***********************************
         * 用途说明:取得课程的基本信息和课程简介
         * 返回值说明: com.stu.service.edu.entity.form.CourseInfoForm
         ***********************************/
        CourseInfoForm getCourseForm(String id);
    
        /***********************************
         * 用途说明:更新课程基本信息和课程简介
         * 返回值说明: boolean
         ***********************************/
        boolean updateCourseForm(CourseInfoForm courseInfoForm);
    
        /***********************************
         * 用途说明:查询课程发布信息
         * @param courseId
         * 返回值说明:
         * @return com.stu.service.edu.entity.vo.CoursePublishVo
         ***********************************/
        CoursePublishVo getCoursePublishById(String courseId);
    
        /***********************************
         * 用途说明:发布课程
         * @param id
         * 返回值说明:
         * @return boolean
         ***********************************/
        boolean publishCourse(String id);
    
        /***********************************
         * 用途说明:分页
         * @param page
         * @param limit
         * @param courseQueryVo
         * 返回值说明:
         * @return com.baomidou.mybatisplus.core.metadata.IPage<com.stu.service.edu.entity.vo.CoursePublishVo>
         ***********************************/
        IPage<CourseVo> pageCourses(Long page, Long limit, CourseQueryVo courseQueryVo);
    
    
        /***********************************
         * 用途说明:根据课程id删除课程(章节,详情,视频都需要删除)
         * @param id
         * 返回值说明:
         * @return boolean
         ***********************************/
       boolean deleteById(String id);
    
    }

    5、service实现类

    package com.stu.service.edu.service.impl;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.stu.service.edu.entity.Chapter;
    import com.stu.service.edu.entity.Course;
    import com.stu.service.edu.entity.CourseDescription;
    import com.stu.service.edu.entity.Video;
    import com.stu.service.edu.entity.constant.CourseConstant;
    import com.stu.service.edu.entity.form.CourseInfoForm;
    import com.stu.service.edu.entity.vo.CoursePublishVo;
    import com.stu.service.edu.entity.vo.CourseQueryVo;
    import com.stu.service.edu.entity.vo.CourseVo;
    import com.stu.service.edu.mapper.ChapterMapper;
    import com.stu.service.edu.mapper.CourseDescriptionMapper;
    import com.stu.service.edu.mapper.CourseMapper;
    import com.stu.service.edu.mapper.VideoMapper;
    import com.stu.service.edu.service.ChapterService;
    import com.stu.service.edu.service.CourseDescriptionService;
    import com.stu.service.edu.service.CourseService;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.stu.service.edu.service.VideoService;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import java.util.List;
    
    /**
     * <p>
     * 课程 服务实现类
     * </p>
     *
     * @author stu
     * @since 2022-05-05
     */
    @Service
    public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> implements CourseService {
    
        @Autowired
        private CourseDescriptionService courseDescriptionService;
    
        @Autowired
        private VideoMapper videoMapper;
    
        @Autowired
        private ChapterMapper chapterMapper;
    
        @Autowired
        private CourseDescriptionMapper descriptionMapper;
    
        @Autowired
        private VideoService videoService;
    
        @Autowired
        private ChapterService chapterService;
    
        /***********************************
         * 用途说明:保存课程基本信息和课程简介
         * 返回值说明: com.stu.service.edu.entity.Course
         ***********************************/
        @Transactional(rollbackFor = Exception.class)
        @Override
        public Course saveCourseInfo(CourseInfoForm courseInfoForm) {
    
            //保存课程基本信息
            Course course = new Course();
            BeanUtils.copyProperties(courseInfoForm, course);
            course.setStatus(CourseConstant.STATUS_DRAFT);//未发布
            baseMapper.insert(course);
    
            //保存课程简介
            CourseDescription courseDescription = new CourseDescription();
            courseDescription.setDescription(courseInfoForm.getDescription());
            //设置课程和描述是一对一的关系,即课程id和描述id相等。
            //EduCourseDescription实体类主键生成策略改为input。
            courseDescription.setId(course.getId());
            courseDescriptionService.save(courseDescription);
    
            return course;
        }
    
        /***********************************
         * 用途说明:取得课程的基本信息和课程简介
         * 返回值说明: com.stu.service.edu.entity.form.CourseInfoForm
         ***********************************/
        @Override
        public CourseInfoForm getCourseForm(String id) {
            return baseMapper.getCourseForm(id);
        }
    
        /***********************************
         * 用途说明:更新课程基本信息和课程简介
         * 返回值说明: boolean
         ***********************************/
        @Transactional(rollbackFor = Exception.class)
        @Override
        public boolean updateCourseForm(CourseInfoForm courseInfoForm) {
            //课程基本信息
            Course course = new Course();
            BeanUtils.copyProperties(courseInfoForm, course);
            int countUpdate = baseMapper.updateById(course);
    
            //课程简介
            CourseDescription courseDescription = new CourseDescription();
            courseDescription.setId(course.getId());
            courseDescription.setDescription(courseInfoForm.getDescription());
    
            boolean countUpdateDescriptiong = courseDescriptionService.updateById(courseDescription);
    
            return (countUpdate > 0 && countUpdateDescriptiong);
        }
    
        /***********************************
         * 用途说明:
         * @param courseId
         * 返回值说明:查询课程发布信息
         * @return com.stu.service.edu.entity.vo.CoursePublishVo
         ***********************************/
        @Override
        public CoursePublishVo getCoursePublishById(String courseId) {
            return baseMapper.getCoursePublishById(courseId);
        }
    
        @Override
        public boolean publishCourse(String id) {
            Course course = new Course();
            course.setId(id);
            course.setStatus(CourseConstant.STATUS_NORMAL);
            return baseMapper.updateById(course) > 0;
        }
    
        /***********************************
         * 用途说明:课程分页
         * @param page
         * @param limit
         * @param courseQueryVo
         * 返回值说明:
         * @return com.baomidou.mybatisplus.core.metadata.IPage<com.stu.service.edu.entity.vo.CoursePublishVo>
         ***********************************/
        @Override
        public IPage<CourseVo> pageCourses(Long page, Long limit, CourseQueryVo courseQueryVo) {
    
            QueryWrapper<CourseVo> queryWrapper = new QueryWrapper<>();
            queryWrapper.orderByAsc("t1.gmt_modified");
    
            String title = courseQueryVo.getTitle();
    
    
            if (!StringUtils.isEmpty(title)) {
                queryWrapper.like("t1.title", title);
            }
            Page<CourseVo> pageParam = new Page<>(page, limit);
            List<CourseVo> coursePublishVos = baseMapper.pageCourses(pageParam, queryWrapper);
            pageParam.setRecords(coursePublishVos);
            return pageParam;
        }
    
        /***********************************
         * 用途说明:根據id刪除課程(包括课时,小节,详情等)
         * @param id
         * 返回值说明:
         * @return boolean
         ***********************************/
        @Transactional(rollbackFor = Exception.class)
        @Override
        public boolean deleteById(String id) {
            boolean result = false;
            //删除video课时
            QueryWrapper<Video> videoQueryWrapper = new QueryWrapper<>();
            videoQueryWrapper.eq("course_id", id);
            boolean videoResult = videoService.remove(videoQueryWrapper);
            //删除description课程详情
            QueryWrapper<Chapter> chapterQueryWrapper = new QueryWrapper<Chapter>();
            chapterQueryWrapper.eq("course_id", id);
             boolean chapterResult = chapterService.remove(chapterQueryWrapper);
    
            boolean desResult = courseDescriptionService.removeById(id);
    
            //删除course课程
            int courseResult = baseMapper.deleteById(id);
            if(videoResult && chapterResult && courseResult > 0){
                result = true;
            }
            return result;
        }
    }

    6、mapper接口

    package com.stu.service.edu.mapper;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.toolkit.Constants;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.stu.service.edu.entity.Course;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.stu.service.edu.entity.form.CourseInfoForm;
    import com.stu.service.edu.entity.vo.CoursePublishVo;
    import com.stu.service.edu.entity.vo.CourseVo;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    /**
     * <p>
     * 课程 Mapper 接口
     * </p>
     *
     * @author stu
     * @since 2022-05-05
     */
    public interface CourseMapper extends BaseMapper<Course> {
    
        /***********************************
         * 用途说明:取得课程的基本信息和课程简介
         * @param id
         * 返回值说明:
         * @return com.stu.service.edu.entity.form.CourseInfoForm
         ***********************************/
        CourseInfoForm getCourseForm(String id);
    
        /***********************************
         * 用途说明:查询发布课程信息
         * @param courseId
         * 返回值说明:
         * @return com.stu.service.edu.entity.vo.CoursePublishVo
         ***********************************/
        CoursePublishVo getCoursePublishById(String courseId);
    
        /***********************************
         * 用途说明:课程列表
         * @param pageParam
         * @param queryWrapper
         * 返回值说明:
         * @return java.util.List<com.stu.service.edu.entity.vo.CoursePublishVo>
         ***********************************/
        List<CourseVo> pageCourses(Page<CourseVo> pageParam, @Param(Constants.WRAPPER)QueryWrapper<CourseVo> queryWrapper);
    
    
    }

    7、mapper的xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.stu.service.edu.mapper.CourseMapper">
        <resultMap id="baseBesultMap" type="com.stu.service.edu.entity.form.CourseInfoForm">
            <id column="id" property="id"/>
            <result column="teacher_id" property="teacherId"/>
            <result column="subject_id" property="subjectId"/>
            <result column="subject_parent_id" property="subjectParentId"/>
            <result column="title" property="title"/>
            <result column="price" property="price"/>
            <result column="lesson_num" property="lessonNum"/>
            <result column="cover" property="cover"/>
            <result column="description" property="description"/>
        </resultMap>
    
        <select id="getCourseForm" resultMap="baseBesultMap">
            SELECT t1.id,
                   t1.teacher_id,
                   t1.subject_id,
                   t1.subject_parent_id,
                   t1.title,
                   t1.price,
                   t1.lesson_num,
                   t1.cover,
                   t2.description
            FROM edu_course t1
                     LEFT JOIN edu_course_description t2 ON t1.id = t2.id
            WHERE t1.id = #{id}
        </select>
        <select id="getCoursePublishById" parameterType="java.lang.String"
                resultType="com.stu.service.edu.entity.vo.CoursePublishVo">
            SELECT t1.id,
                   t1.title,
                   t1.price,
                   t1.cover,
                   t1.lesson_num,
                   td.description,
                   t3.title AS subjectLevelOne,
                   t4.title AS subjectLevelTwo,
                   t2.NAME  AS teacherName,
                   t3.id,
                   t1.subject_id,
                   t4.parent_id
            FROM edu_course t1
                     LEFT JOIN edu_course_description td ON td.id = t1.id
                     LEFT JOIN edu_teacher t2 ON t2.id = t1.teacher_id
                     LEFT JOIN edu_subject t3 ON t3.id = t1.subject_parent_id
                     LEFT JOIN edu_subject t4 ON t4.id = t1.subject_id
            WHERE t1.id = #{courseId}
        </select>
    
        <!--课程分页-->
        <select id="pageCourses" resultType="com.stu.service.edu.entity.vo.CourseVo">
            SELECT t1.id,
                   t1.title,
                   t1.cover,
                   t1.lesson_num   AS lessonNum,
                   t1.price,
                   t1.buy_count    AS buyCount,
                   t1.view_count   AS viewCount,
                   t1.`status`,
                   t1.gmt_create   AS gmtCreate,
                   t1.gmt_modified AS gmtModified,
                   t3.title        AS subjectParentTitle,
                   t4.title        AS subjectTitle,
                   t2.NAME         AS teacherName,
                   td.description
            FROM edu_course t1
                     LEFT JOIN edu_course_description td ON td.id = t1.id
                     LEFT JOIN edu_teacher t2 ON t2.id = t1.teacher_id
                     LEFT JOIN edu_subject t3 ON t3.id = t1.subject_parent_id
                     LEFT JOIN edu_subject t4 ON t4.id = t1.subject_id
                ${ew.customSqlSegment}
        </select>
    </mapper>

    8、vue的js文件

    import request from '@/utils/request'
    
    export default {
        //保存课程基本信息和课程简介
        saveCourseInfo(course) {
            return request({
                url: '/admin/edu/course/saveCourseInfo',
                method: 'post',
                data: course
            })
        },
        //取得课程基本信息和课程简介
        getCourseForm(courseId) {
            return request({
                url: `/admin/edu/course/getCourseForm/${courseId}`,
                method: 'get'
            })
    
        },
        //更新课程基本信息和课程简介
        updateCourseForm(courseForm) {
            return request({
                url: '/admin/edu/course/updateCourseForm',
                method: 'post',
                data: courseForm
            })
        },
        //课程列表分页
        pageCourses(page,limit,searchData) {
            return request({
                url: `/admin/edu/course/pageCourses/${page}/${limit}`,
                method: 'get',
                params: searchData
            })
        },
    }

    9、vue的页面文件

    <template>
      <div class="app-container">
        <el-form :inline="true" class="demo-form-inline">
          <el-form-item label="课程标题">
            <el-input
              v-model="searchData.title"
              placeholder="示例:Java基础课"
            ></el-input>
          </el-form-item>
          <el-form-item label="课程类别">
            <el-select
              v-model="searchData.subjectLevelOne"
              placeholder="一级分类"
              @change="getTwoSubjectList"
            >
              <el-option
                v-for="info in subjectLevelOneList"
                :key="info.id"
                :label="info.title"
                :value="info.id"
              >
              </el-option>
            </el-select>
            <el-select v-model="searchData.subjectLevelTwo" placeholder="二级分类">
              <el-option
                v-for="info in subjectLevelTwoList"
                :key="info.id"
                :label="info.title"
                :value="info.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <!--课程讲师ID-->
          <el-form-item label="课程讲师">
            <el-select v-model="searchData.teacherId">
              <el-option
                v-for="teacher in teacherList"
                :key="teacher.id"
                :label="teacher.name"
                :value="teacher.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-button type="primary" icon="el-icon-search" @click="getList()"
            >查询</el-button
          >
          <el-button type="default" @click="resetData()">清空</el-button>
        </el-form>
    
        <el-table :data="pageList" border>
          <el-table-column label="序号" width="70" align="center">
            <template slot-scope="scope">
              {{ (page - 1) * limit + scope.$index + 1 }}
            </template>
          </el-table-column>
          <el-table-column label="封面" width="200" align="center">
            <template slot-scope="scope">
              <img :src="scope.row.cover" alt="scope.row.title" width="100%" />
            </template>
          </el-table-column>
          <el-table-column label="课程信息" align="center">
            <template slot-scope="scope">
              <p>
                标题:<a href="">{{ scope.row.title }}</a>
              </p>
              <p>一级分类:{{ scope.row.subjectParentTitle }}</p>
              <p>二级分类: {{ scope.row.subjectTitle }}</p>
    
              <p>
                课时:{{ scope.row.lessonNum }} 游览:{{
                  scope.row.viewCount
                }}
                付费学员:{{ scope.row.buyCount }}
              </p>
            </template>
          </el-table-column>
    
          <el-table-column label="讲师" width="100" align="center">
            <template slot-scope="scope">
              {{ scope.row.teacherName }}
            </template>
          </el-table-column>
          <el-table-column label="价格" width="100" align="center">
            <template slot-scope="scope">
              <el-tag type="success" v-if="Number(scope.row.price) === 0"
                >免费</el-tag
              >
              <el-tag v-else>{{ scope.row.price }}</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="课程状态" width="100" align="center">
            <template slot-scope="scope">
              <el-tag :type="scope.row.status === 'Draft' ? 'warning' : 'success'">
                {{ scope.row.status === "Draft" ? "未发布" : "已发布" }}
              </el-tag>
            </template>
          </el-table-column>
          <el-table-column label="创建时间" width="180" align="center">
            <template slot-scope="scope">
              {{ scope.row.gmtCreate }}
            </template>
          </el-table-column>
          <el-table-column label="操作" width="300" align="center">
            <template slot-scope="scope">
              <router-link :to="'/course/editCourse/' + scope.row.id">
                <el-button type="primary" size="mini" icon="el-icon-edit"
                  >修改</el-button
                >
              </router-link>
              <router-link :to="'/course/editChapter/' + scope.row.id">
                <el-button type="primary" size="mini" icon="el-icon-edit"
                  >编辑大纲</el-button
                >
              </router-link>
    
              <el-button type="primary" size="mini" icon="el-icon-edit" @click="deleteById(scope.row.id)"
                >删除</el-button
              >
            </template>
          </el-table-column>
        </el-table>
          <!--分页组件-->
        <el-pagination
          :current-page="page"
          :page-size="limit"
          :total="total"
          :page-sizes="[5, 10, 15, 20]"
          style="padding: 12px 8px; text-align: center"
          layout="sizes, prev, pager, next, jumper, ->, total"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
        />
      </div>
    </template>
    <script>
    import courseApi from "@/api/course";
    import teacherApi from "@/api/teacher";
    import subjectApi from "@/api/subject";
    
    export default {
      data() {
        return {
          pageList: [],
          total: 0,
          limit: 3,
          page: 1,
          searchData: {
            title: "",
            teacherId: "",
            subjectLevelOne: "",
            subjectLevelTwo: "",
          },
          teacherList: [],
          subjectLevelOneList: [],
          subjectLevelTwoList: [],
        };
      },
      created() {
        this.init();
      },
      methods: {
        //删除
        deleteById(){
    
        },
        init() {
          this.getAllSubject();
          this.getTeacher();
          this.pageCourses();
        },
        //分页
        pageCourses() {
          courseApi
            .pageCourses(this.page, this.limit, this.searchData)
            .then((res) => {
              debugger
              if (res.code === 20000) {
                if (res.data.data.records) {
                  this.pageList = res.data.data.records;
                }
                if (res.data.data.total) {
                  this.total = res.data.data.total;
                }
              }
            });
        },
            //改变数量
        handleSizeChange(size) {
          this.limit = size;
          this.pageCourses();
        },
        //改变页码
        handleCurrentChange(page) {
          this.page = page;
          this.pageCourses();
        },
        getTeacher() {
          teacherApi.listAllTeachers().then((res) => {
            if (res.code === 20000 && res.data.list) {
              this.teacherList = res.data.list;
            }
          });
        },
        getAllSubject() {
          subjectApi.treeList().then((res) => {
            if (res.code === 20000 && res.data.treeList) {
              this.subjectLevelOneList = res.data.treeList;
            }
          });
        },
        //点击一级分类,显示二级分类
        getTwoSubjectList(value) {
          //选中一级分类,在改变一级分类,二级分类显示的数据没有清空的问题
          // this.searchData.subjectLevelTwo = ''
    
          let tempOneSbujectList = this.subjectLevelOneList.filter(
            (item) => item.id === value && item.id
          );
          this.subjectLevelTwoList = tempOneSbujectList[0].childList;
    
          if (
            !this.subjectLevelTwoList.includes(this.searchData.subjectLevelTwo) &&
            this.searchData.subjectLevelTwo
          ) {
            this.searchData.subjectLevelTwo = "";
          }
        },
        //清空查询条件
        resetData() {
          this.searchData = {};
        },
      },
    };
    </script>
    >

    方式二、不是自定义的

    1、controller

    package com.stu.service.edu.controller.admin;
    
    
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.stu.service.base.result.R;
    import com.stu.service.edu.entity.Teacher;
    import com.stu.service.edu.entity.vo.ChapterVo;
    import com.stu.service.edu.service.TeacherService;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * <p>
     * 讲师 前端控制器
     * </p>
     *
     * @author stu
     * @since 2022-04-11
     */
    @RestController
    @RequestMapping("/admin/edu/teacher")
    @CrossOrigin
    public class TeacherController {
    
        @Autowired
        private TeacherService teacherService;
    
        /***********************************
         * 用途说明:批量删除
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @DeleteMapping("batchRemoveTeacher")
        public R batchRemoveTeacher(@RequestBody List<String> idList) {
    
            boolean result = teacherService.removeByIds(idList);
            if (result) {
                return R.ok().message("删除成功");
            }
            return R.error().message("删除失败");
        }
    
        /***********************************
         * 用途说明:删除讲师
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @DeleteMapping("deleteTeacher/{id}")
        public R deleteTeacher(@PathVariable String id) {
    
            /*        if (true) {
                throw new CustomException(ResultCodeEnum.DIVIDE_ZERO);
            }*/
    
            boolean result = teacherService.removeById(id);
            if (result) {
                return R.ok().message("删除成功");
            }
            return R.error().message("删除失败");
        }
    
        /***********************************
         * 用途说明:修改讲师
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @PostMapping("updateTeacher")
        public R updateTeacher(@RequestBody Teacher teacher) {
            boolean result = teacherService.updateById(teacher);
            if (result) {
                return R.ok().message("更新成功");
            }
            return R.error().message("更新失败");
        }
    
        /***********************************
         * 用途说明:添加讲师
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @ApiOperation("添加讲师")
        @PostMapping("addTeacher")
        public R addTeacher(@ApiParam("讲师对象") @RequestBody Teacher teacher) {
            boolean result = teacherService.save(teacher);
            if (result) {
                return R.ok().message("保存成功");
            }
            return R.error().message("保存失败");
        }
    
        /***********************************
         * 用途说明:查询讲师表所有数据
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @GetMapping("findAll")
        public R findAllTeacher() {
            List<Teacher> list = teacherService.list();
            return R.ok().data("list", list);
        }
    
        /***********************************
         * 用途说明:查询
         * 返回值说明: com.stu.service.edu.entity.Teacher
         ***********************************/
        @GetMapping("get/{id}")
        public R getTeacher(@PathVariable String id) {
    
            return R.ok().data("dataInfo", teacherService.getById(id));
    
        }
    
        /***********************************
         * 用途说明:查询讲师表所有数据
         * 返回值说明: com.stu.service.base.result.R
         ***********************************/
        @GetMapping("pageList/{page}/{limit}")
        public R pageList(@PathVariable long page, @PathVariable long limit, ChapterVo.TeacherQueryVo teacherQueryVo) {
            Page<Teacher> pageParam = new Page<>(page, limit);
            teacherService.listPage(pageParam, teacherQueryVo);
            Map<String, Object> map = new HashMap<String, Object>();
            long total = pageParam.getTotal();
            List<Teacher> list = pageParam.getRecords();
            map.put("total", total);
            map.put("list", list);
            return R.ok().data(map);
    
        }
    }

    2、service接口

    package com.stu.service.edu.service;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.stu.service.edu.entity.Teacher;
    import com.baomidou.mybatisplus.extension.service.IService;
    import com.stu.service.edu.entity.vo.ChapterVo;
    
    /**
     * <p>
     * 讲师 服务类
     * </p>
     *
     * @author stu
     * @since 2022-04-11
     */
    public interface TeacherService extends IService<Teacher> {
    
        /**
         * 分页
         * @param pageParam
         * @param teacherQueryVo
         */
        IPage<Teacher> listPage(Page<Teacher> pageParam, ChapterVo.TeacherQueryVo teacherQueryVo);
    }

    3、service实现类

    package com.stu.service.edu.service.impl;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.stu.service.edu.entity.Teacher;
    import com.stu.service.edu.entity.vo.ChapterVo;
    import com.stu.service.edu.mapper.TeacherMapper;
    import com.stu.service.edu.service.TeacherService;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    /**
     * <p>
     * 讲师 服务实现类
     * </p>
     *
     * @author stu
     * @since 2022-04-11
     */
    @Service
    public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {
    
        @Autowired
        private TeacherService teacherService;
    
        @Override
        public IPage<Teacher> listPage(Page<Teacher> pageParam, ChapterVo.TeacherQueryVo teacherQueryVo) {
    
            QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
            queryWrapper.orderByAsc("sort","id");
    
            if (teacherQueryVo == null) {
                return baseMapper.selectPage(pageParam, queryWrapper);
            }
    
            String name = teacherQueryVo.getName();
            Integer level = teacherQueryVo.getLevel();
            String begin = teacherQueryVo.getBegin();
            String end = teacherQueryVo.getEnd();
    
            if (!StringUtils.isEmpty(name)) {
                queryWrapper.like("name", name);
            }
    
            if (null != level) {
                queryWrapper.eq("level", level);
            }
    
            if (!StringUtils.isEmpty(begin)) {
                queryWrapper.ge("gmt_create", begin);
            }
    
            if (!StringUtils.isEmpty(end)) {
                queryWrapper.le("gmt_create", end);
            }
    
            return baseMapper.selectPage(pageParam, queryWrapper);
        }
    }

    4、mappper自带的接口(框架自带的,不用在TeacherMapper接口和xml里写自定义的接口和sql语句)

    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by FernFlower decompiler)
    //
    
    package com.baomidou.mybatisplus.core.mapper;
    
    import com.baomidou.mybatisplus.core.conditions.Wrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import java.io.Serializable;
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    import org.apache.ibatis.annotations.Param;
    
    public interface BaseMapper<T> extends Mapper<T> {
        int insert(T entity);
    
        int deleteById(Serializable id);
    
        int deleteByMap(@Param("cm") Map<String, Object> columnMap);
    
        int delete(@Param("ew") Wrapper<T> wrapper);
    
        int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
    
        int updateById(@Param("et") T entity);
    
        int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
    
        T selectById(Serializable id);
    
        List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
    
        List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
    
        T selectOne(@Param("ew") Wrapper<T> queryWrapper);
    
        Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
    
        List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
    
        List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
    
        List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
    
        <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
    
        <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
    }

    5、mapper接口

    package com.stu.service.edu.mapper;
    
    import com.stu.service.edu.entity.Teacher;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    
    /**
     * <p>
     * 讲师 Mapper 接口
     * </p>
     *
     * @author stu
     * @since 2022-04-11
     */
    public interface TeacherMapper extends BaseMapper<Teacher> {
    
    }

     6、vue和上边方式1一样处理

  • 相关阅读:
    第一章
    第三章
    第四章
    第十章 读书笔记
    第八章 读书笔记
    第九章 读书笔记
    第7章实验心得
    第六章实验心得
    第五章心得体会
    第四章实验心得
  • 原文地址:https://www.cnblogs.com/konglxblog/p/16332941.html
Copyright © 2020-2023  润新知