学成在线--17.我的课程

文章目录

  • 一.需求分析
  • 二.API接口
  • 三.PageHelper
    • 1.PageHelper介绍
    • 2.添加依赖
    • 3.配置pageHelper
  • 四.Dao
    • 1.mapper 接口
    • 2.mapper.xml映射文件
    • 3.测试Dao
  • 五.Service
  • 六.Controller
  • 七.前端
    • 1.创建course_list.vue
    • 2.路由
    • 3.定义API方法
    • 4.前端视图course_list.vue详解
      • 1)API调用--在视图中调用findCourseList方法
      • 2)在mounted钩子中调用getCourse方法
      • 3)在分页方法中调用getCourse方法
  • 八.测试结果

一.需求分析

课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询。
在这里插入图片描述上边的查询要实现分页、会存在多表关联查询,所以建议使用mybatis实现我的课程查询。

二.API接口

在api工程创建course包,创建CourseControllerApi接口。
文件位置:xcEduService01\xc-service-api\src\main\java\com\xuecheng\api\course\CourseControllerApi.java

//查询课程列表
@ApiOperation("查询我的课程列表")
public QueryResponseResult<CourseInfo> findCourseList(int page,int size,CourseListRequest courseListRequest
);

输入参数:页码、每页显示个数、查询条件

输出结果类型:QueryResponseResult<自定义类型>

三.PageHelper

1.PageHelper介绍

PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句,最终实现分页查询功能。

我的课程具有分页功能,本项目使用Pagehelper实现Mybatis分页功能开发,由于本项目使用springboot开发,在springboot上集成pagehelper(https://github.com/pagehelper/pagehelper-spring-boot)

PageHelper的使用方法及原理如下:
在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中PageHelper在mybatis执行sql前进行拦截,从ThreadLocal取出分页参数,修改当前执行的sql语句,添加分页sql。

最后执行添加了分页sql的sql语句,实现分页查询。

在这里插入图片描述

2.添加依赖

文件位置:xcEduService01\xc-service-manage-course\pom.xml

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper‐spring‐boot‐starter</artifactId><version>1.2.4</version>
</dependency>

3.配置pageHelper

在application.yml中配置pageHelper操作的数据库类型:
文件位置:xcEduService01\xc-service-manage-course\src\main\resources\application.yml

pagehelper:helper‐dialect: mysql

四.Dao

1.mapper 接口

文件位置:xcEduService01\xc-service-manage-course\src\main\java\com\xuecheng\manage_course\dao\CourseMapper.java

import com.github.pagehelper.Page;
import com.xuecheng.framework.domain.course.CourseBase;
import com.xuecheng.framework.domain.course.ext.CourseInfo;
import com.xuecheng.framework.domain.course.request.CourseListRequest;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CourseMapper {CourseBase findCourseBaseById(String id);	Page<CourseInfo> findCourseListPage(CourseListRequest courseListRequest);
}

2.mapper.xml映射文件

文件位置:xcEduService01\xc-service-manage-course\src\main\resources\com\xuecheng\manage_course\dao\CourseMapper.xml

<select id="findCourseListPage" resultType="com.xuecheng.framework.domain.course.ext.CourseInfo" parameterType="com.xuecheng.framework.domain.course.request.CourseListRequest">SELECTcourse_base.*,(SELECT pic FROM course_pic WHERE courseid = course_base.id) picFROMcourse_base
</select>

3.测试Dao

文件位置:xcEduService01\xc-service-manage-course\src\test\java\com\xuecheng\manage_course\dao\TestDao.java

//测试分页
@Test
public void testPageHelper(){PageHelper.startPage(2, 1);CourseListRequest courseListRequest = new CourseListRequest();Page<CourseInfo> courseListPage = courseMapper.findCourseListPage(courseListRequest);List<CourseInfo> result = courseListPage.getResult();System.out.println(courseListPage);
}

五.Service

定义CourseService.java类,用于课程管理的service定义:

文件位置:xcEduService01\xc-service-manage-course\src\main\java\com\xuecheng\manage_course\service\CourseService.java

//课程列表分页查询
public QueryResponseResult<CourseInfo> findCourseList(int page,int size,CourseListRequest courseListRequest) {if(courseListRequest == null){courseListRequest = new CourseListRequest();}if(page<=0){page = 0;} if(size<=0){size = 20;} //设置分页参数PageHelper.startPage(page, size);//分页查询Page<CourseInfo> courseListPage = courseMapper.findCourseListPage(courseListRequest);//查询列表List<CourseInfo> list = courseListPage.getResult();//总记录数long total = courseListPage.getTotal();//查询结果集QueryResult<CourseInfo> courseIncfoQueryResult = new QueryResult<CourseInfo>();courseIncfoQueryResult.setList(list);courseIncfoQueryResult.setTotal(total);return new QueryResponseResult<CourseInfo>(CommonCode.SUCCESS, courseIncfoQueryResult);
}

六.Controller

文件位置:xcEduService01\xc-service-manage-course\src\main\java\com\xuecheng\manage_course\controller\CourseController.java

@RestController
@RequestMapping("/course")
public class CourseController implements CourseControllerApi {@AutowiredCourseService courseService;@Override@GetMapping("/coursebase/list/{page}/{size}")public QueryResponseResult<CourseInfo> findCourseList(@PathVariable("page") int page, @PathVariable("size") int size,CourseListRequest courseListRequest) {return courseService.findCourseList(page,size,courseListRequest);}
}

七.前端

1.创建course_list.vue

使用element 的card组件,页面布局代码如下:
文件位置:xc-ui-pc-teach\src\module\course\page\course_list.vue

<template><section><el-row ><el-col :span="8"  :offset=2 ><el-card :body-style="{ padding: '10px' }"><img src="/static/images/add.jpg" class="image" height="150px"><div style="padding: 10px;"><span>课程名称</span><div class="bottom clearfix"><time class="time"></time><router-link class="mui-tab-item" :to="{path:'/course/add/base'}"><el-button type="text" class="button" >新增课程</el-button></router-link></div></div></el-card></el-col><el-col :span="8" v-for="(course, index) in courses" :key="course.id" :offset="index > 0 ? 2 : 2"><el-card :body-style="{ padding: '10px' }"><img :src="course.pic!=null?imgUrl+course.pic:'/static/images/nonepic.jpg'" class="image" height="150px"><div style="padding: 10px;"><span>{{course.name}}</span><div class="bottom clearfix"><time class="time"></time><el-button type="text" class="button" @click="handleManage(course.id)">管理课程</el-button></div></div></el-card></el-col><!--分页--><el-col :span="24" class="toolbar"><el-pagination background layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="size":total="total" :current-page="page"style="float:right;"></el-pagination></el-col></el-row></section>
</template>
<script>import * as courseApi from '../api/course';import utilApi from '../../../common/utils';let sysConfig = require('@/../config/sysConfig')export default {data() {return {page:1,size:7,total: 0,courses: [{id:'4028e581617f945f01617f9dabc40000',name:'test01',pic:''},{id:'test02',name:'test02',pic:''}],sels: [],//列表选中列imgUrl:sysConfig.imgUrl}},methods: {//分页方法handleCurrentChange(val) {this.page = val;this.getCourse();},//获取课程列表getCourse() {courseApi.findCourseList(this.page,this.size,{}).then((res) => {console.log(res);if(res.success){this.total = res.queryResult.total;this.courses = res.queryResult.list;}});},handleManage: function (id) {console.log(id)this.$router.push({ path: '/course/manager/'+id})}},created(){},mounted() {//查询我的课程this.getCourse();}}
</script>
<style scoped>.el-col-8{width:20%}.el-col-offset-2{margin-left:2%}.time {font-size: 13px;color: #999;}.bottom {margin-top: 13px;line-height: 12px;}.button {padding: 0;float: right;}.image {width: 100%;display: block;}.clearfix:before,.clearfix:after {display: table;content: "";}.clearfix:after {clear: both}
</style>

2.路由

文件位置:xc-ui-pc-teach\src\module\course\router\index.js

import course_list from '@/module/course/page/course_list.vue';
import Home from '@/module/home/page/home.vue';
export default [{path: '/course',component: Home,name: '课程管理',hidden: false,iconCls: 'el-icon-document',children: [{ path: '/course/list', name: '我的课程',component: course_list,hidden: false },}

3.定义API方法

文件位置:xc-ui-pc-teach\src\module\course\api\course.js

//我的课程列表
export const findCourseList = (page,size,params) => {//对于查询条件,向服务端传入key/value串。//使用工具类将json对象转成key/valuelet queries = querystring.stringify(params)return http.requestQuickGet(apiUrl+"/course/coursebase/list/"+page+"/"+size+"?"+queries);
}

4.前端视图course_list.vue详解

文件位置:xc-ui-pc-teach\src\module\course\page\course_list.vue

1)API调用–在视图中调用findCourseList方法

//获取课程列表
getCourse() {courseApi.findCourseList(this.page,this.size,{}).then((res) => {console.log(res);if(res.success){this.total = res.queryResult.total;this.courses = res.queryResult.list;}});
},

2)在mounted钩子中调用getCourse方法

mounted() {//查询我的课程this.getCourse();
}

3)在分页方法中调用getCourse方法

//分页方法
handleCurrentChange(val) {this.page = val;this.getCourse();
}

八.测试结果

页面效果如下:
注意:由于课程图片服务器没有搭建,这里图片暂时无法显示。
在这里插入图片描述

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

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

相关文章

学成在线--18.新增课程(课程分类查询)

文章目录一.需求分析二.课程分类查询介绍三.数据结构四.数据格式五.数据模型六.Api接口七.服务器端1.Dao1&#xff09;定义mapper2&#xff09;定义mapper映射文件2.Service3.Controller八.接口测试一.需求分析 用户操作流程如下&#xff1a; 1、用户进入“我的课程”页面&…

POI 方式-excle 表格导出实现-java-poi

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 效果&#xff1a; jsp 页面 用的Bootstrap &#xff1a; <li class"dropdown"> <a href"javascript:void(0)…

学成在线--19.新增课程(数据字典)

文章目录一.介绍二.数据模型三.数据模型类四.字典查询API接口五.服务器端1.Dao2.Service3.Controller一.介绍 在新增课程界面需要选择课程等级、课程状态等&#xff0c;这些信息统一采用数据字典管理的方式。 本项目对一些业务的分类配置信息&#xff0c;比如&#xff1a;课程…

程序员的进化

对于很多同学来说&#xff0c;他们对程序员的职业生涯非常关注。而这本质上是一个进化的过程。我们将如何进化&#xff1f;在每个进化阶段我们应该如何提高自己&#xff1f;下面的文章根据我自己的切身经历和阅读过的书&#xff0c;为程序员每个阶段的进化提供了不同的学习思路…

学成在线--20.新增课程(最后完善)

文章目录一.效果展示二.服务端1.Api接口2.Dao3.Service4.Controller三.前端1.页面完善1&#xff09;创建course_add.vue页面2&#xff09;course_add.vue页面路由3&#xff09;course_list.vue中添加链接2.查询数据字典1&#xff09;视图中代码2&#xff09;定义Api方法3&#…

html里面表格问题

表格问题汇总&#xff1a; 现代网站中表格的用武之地已经很少了&#xff0c;但是一些框架&#xff0c;如bootstorp还是会用到的&#xff0c;所以还是需要了解掌握。本随笔只涉及开发过程中遇到的表格问题&#xff0c;不做其他拓展。 1、caption代表的是表格元素的标题。至于标题…

RT-Thread简介

RT-Thread简介 RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统&#xff08;RTOS&#xff09;&#xff0c;具有完全的自主知识产权。 经过16个年头的沉淀&#xff0c;伴随着物联网的兴起&#xff0c;它正演变成一个功能强大、组件丰富的物联网操作系统。 RT-Thre…

学成在线--21.课程信息修改

文章目录一.需求分析二.课程管理导航页面1.定义course_manage.vue为课程管理页面2.创建各个信息管理页面3.创建路由三.服务端1.Api接口1&#xff09;根据课程ID查询课程信息2&#xff09;修改课程信息2.Dao3.Service4.Controller四.前端1. 完成course_baseinfo.vue页面2.API方法…

C#曲线分析平台的制作(四,highcharts+ajax加载后台数据)

在上一篇博客&#xff1a;C#曲线分析平台的制作&#xff08;三&#xff0c;三层构架echarts显示&#xff09;中已经完成了后台的三层构架的简单搭建&#xff0c;为实现后面的拓展应用开发和review 改写提供了方便。而在曲线分析平台中&#xff0c;往往有要求时间轴联动功能&…

国际C语言混乱代码大赛结果公布

国际C语言混乱代码大赛&#xff08;IOCCC, The International Obfuscated C Code Contest&#xff09;是一项国际编程赛事&#xff0c;从1984年开始&#xff0c;每年举办一次&#xff08;1997年、1999年、2002年、2003年和2006年例外&#xff09;。目的是写出最有创意的最让人难…

eclipse加速之禁用 JS、jsp 等文件的语法验证

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 去除eclipse的JS验证&#xff1a; 将windows->preference->Java Script->Validator->Errors/Warnings-> Enable Javascr…

学成在线--22.课程营销

文章目录一.需求分析二.数据模型三.服务端1.Api接口1&#xff09;查询课程营销信息2&#xff09;更新课程营销信息2.Dao3.Service4.Controller四.前端1.Api 方法2.编写 course_marketinfo.vue1&#xff09;template2&#xff09;数据对象3&#xff09;保存方法4&#xff09;在m…

电子邮件系统

&#xff08;一&#xff09;电子邮件系统的构成 1.用户代理 用户与电子邮件系统的接口&#xff0c;用户代理使用户能够通过一个很友好的接口来发送和接收邮件&#xff0c;用户代理就是一个运行在PC上的程序。 2 邮件服务器 邮件服务器的功能是发送和接收邮件&#xff0c;同…

mysql查看binlog日志内容

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09; binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变&#xff0c;并以二进制的形式保存在磁盘中&#xff1b; 它可以用来查看数据库的变更历史、数据库增量备份和恢复、Mysql的复制&…

架构师:我们需要顶层设计

架构师&#xff1a;我们需要顶层设计背景&#xff1a; 某公司&#xff0c;建立的程序又被推倒&#xff0c;外人觉得很奇怪&#xff0c;这个程序的主管非常敬业&#xff0c;关注到了程序每一个细节&#xff0c;甚至包括每一个按钮的文字和位置。这个主管很委屈&#xff0c;他说…

Diango博客--19.使用 Docker部署项目到线上服务器

文章目录1.克隆代码到服务器2.创建环境变量文件用于存放项目敏感信息3.在 .production 文件写入下面的内容并保存4.修改 Nginx 配置5.修改项目配置文件6.启动容器7.检查容器启动状况8.配置 HTTPS 证书&#xff08;没有配置域名无法配置&#xff0c;只能通过服务器 ip 以 HTTP 协…

Jquery Datatable 数据填充报错:requested unknown parameter ‘XXX‘ for row xx, column xx 解决方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如图&#xff1a; 解决方法见官网&#xff1a;https://datatables.net/manual/tech-notes/4 摘要如下&#xff1a; Parameter is an…

Tarjan-缩点

$Tarjan$缩点 Tarjan的第二个应用就是求缩点啦。缩点虽然比割点麻烦一点&#xff0c;但是用处也比割点要大不少。 本来要学另外两个缩点算法的,但是似乎没什么用...$MST$里确实有只能有$prim$或者只能用$kruscal$的题目&#xff0c;但是这三种缩点...在网上没有找到介绍它们之间…

百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

这是一个创建于 375 天前的主题&#xff0c;其中的信息可能已经有所发展或是发生改变。由数人云、优维科技、中生代社区联合发起的 系列 Meetup 《 DevOps&SRE 超越传统运维之道》 先后在深圳、北京举行过两场 7 月 15 日上海站&#xff0c;敬请期待 ▼ 王一男老师在《 Dev…

解决Cannot change version of project facet Dynamic web module to 2.5

见 &#xff1a; http://blog.csdn.net/steveguoshao/article/details/38414145 我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp&#xff0c;由于这个catalog比较老&#xff0c;用的servlet还是2.3的&#xff0c;而一般现在至少都是2.5…