欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

程序员文章站 2022-06-13 12:31:58
...

需求1:需要分页显示,我的课程,并且显示图片,(暂时不用显示图片)
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
要求做出来的效果:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
上边的查询要实现分页、会存在多表关联查询,所以建议使用mybatis实现我的课程查询。
1.2 API 接口
输入参数:
页码、每页显示个数、查询条件
输出结果类型:
QueryResponseResult,这里面包括,操作状态的代码,和分页数据响应

@GetMapping("/coursebase/list/{page}/{size}")
    //查询课程列表,参数为:当前页码,每页显示条数,和一个备用的扩展参数
    QueryResponseResult findCourseList(int page, int size, CourseListRequest courseListRequest);

1.3课程管理服务
PageHelper 分页插件原理
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
参考使用的代码:注意,分页插件的起始页码是1,不是0

//用PageHelper查询课程列表的分页数据,参数为:当前页码,每页显示条数,扩展参数
    public QueryResult<CourseInfo> findCourseList(int page, int size,CourseListRequest courseListRequest) {
        if (courseListRequest==null){
            //如果扩展参数为空,就new一个,免得后面取值出现报错
            courseListRequest = new CourseListRequest();
        }
        if (page < 0){
            //进来的页面,要是小于0,就是非法参数,默认查第一页
            //PageHelper,的分页起始为1,不是0
            page = 1;
        }
        if (size < 0){
            //进来的显示条数,要是小于0,就是非法参数,默认查5条
            size = 5;
        }
        //启动分页插件,并且设置页码和显示条数
        PageHelper.startPage(page,size);
        //执行写好的sql方法
        Page<CourseInfo> courseListPage = courseMapper.findCourseList(courseListRequest);
        //QueryResult<CourseInfo>组装这个返回的分页对象
            //得到分页的数据集合
        List<CourseInfo> courseInfoList = courseListPage.getResult();
            //数据总条数
        long total = courseListPage.getTotal();
        QueryResult<CourseInfo> queryResult = new QueryResult<>();
        queryResult.setTotal(total);
        queryResult.setList(courseInfoList);

        return queryResult;

    }

开始搭建课程服务:

添加分页jar包

<!--mybatis分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>

配置具体数据库的方言:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

pagehelper: #指定分页插件使用的是什么数据库,好更换方言类型
      helper‐dialect: mysql

写分页查询的Dao
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

//返回一个封装好的,page<CourseInfo>,CourseInfo是自定义的实体类,包含课程id,名称,图片
   Page<CourseInfo> findCourseList(CourseListRequest courseListRequest);

写映射的mapper.xml:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

<select id="findCourseList" parameterType="com.xuecheng.framework.domain.course.request.CourseListRequest"
            resultType="com.xuecheng.framework.domain.course.ext.CourseInfo">
        select a.id,a.name,b.pic from course_base as a left join course_pic as b on a.id = b.courseid
    </select>

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

//用PageHelper查询课程列表的分页数据,参数为:当前页码,每页显示条数,扩展参数
    public QueryResult<CourseInfo> findCourseList(int page, int size,CourseListRequest courseListRequest) {
        if (courseListRequest==null){
            //如果扩展参数为空,就new一个,免得后面取值出现报错
            courseListRequest = new CourseListRequest();
        }
        if (page < 0){
            //进来的页面,要是小于0,就是非法参数,默认查第一页
            //PageHelper,的分页起始为1,不是0
            page = 1;
        }
        if (size < 0){
            //进来的显示条数,要是小于0,就是非法参数,默认查5条
            size = 5;
        }
        //启动分页插件,并且设置页码和显示条数
        PageHelper.startPage(page,size);
        //执行写好的sql方法
        Page<CourseInfo> courseListPage = courseMapper.findCourseList(courseListRequest);
        //QueryResult<CourseInfo>组装这个返回的分页对象
        //得到分页的数据集合
        List<CourseInfo> courseInfoList = courseListPage.getResult();
        //数据总条数
        long total = courseListPage.getTotal();
        QueryResult<CourseInfo> queryResult = new QueryResult<>();
        queryResult.setTotal(total);
        queryResult.setList(courseInfoList);

        return queryResult;

    }

1.3.4 Controller

 @GetMapping("/coursebase/list/{page}/{size}")
    //查询课程列表,参数为:当前页码,每页显示条数,和一个备用的扩展参数
    public QueryResponseResult findCourseList(@PathVariable("page") int page,@PathVariable("size") int size, CourseListRequest courseListRequest) {
        System.err.println(page+size);
        QueryResult<CourseInfo> courseList = courseService.findCourseList(page, size, courseListRequest);
        //封装分页数据集合和总记录数的对象
        QueryResult queryResult = new QueryResult();
        //得到分页数据集合
        queryResult.setList(courseList.getList());
        // 得到总记录数
        queryResult.setTotal(courseList.getTotal());
        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS,queryResult);
        return queryResponseResult;
    }

1.3.5 测试
使用postman或swagger-ui测试课程列表接口。

学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
前端不用改,直接使用:


实现添加课程的功能:

学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
课程基础信息的表:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
写Api,
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

//查询课程分类信息
    @ApiOperation("查询添加课程的所有分类信息")
    public CategoryNode findList();

dao 根据数据格式的分析,此查询需要返回树型数据格式,为了开发方便我们使用mybatis实现查询:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

 //查询课程的所有分类信息
   CategoryNode findCategoryList();

学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

<resultMap id="CategoryMap" type="com.xuecheng.framework.domain.course.ext.CategoryNode">
        <id property="id" column="one_id"></id>
        <result property="name" column="one_name"></result>
        <result property="parentid" column="one_parentid"></result>
        <collection property="children" ofType="com.xuecheng.framework.domain.course.ext.CategoryNode">
            <id property="id" column="two_id"></id>
            <result property="name" column="two_name"></result>
            <result property="parentid" column="two_parentid"></result>
            <collection property="children" ofType="com.xuecheng.framework.domain.course.ext.CategoryNode">
                <id property="id" column="three_id"></id>
                <result property="name" column="three_name"></result>
                <result property="parentid" column="three_parentid"></result>
            </collection>
        </collection>
    </resultMap>

    <select id="findCategoryList" resultMap="CategoryMap">
        select c1.id as one_id,c1.name as one_name,c1.parentid as one_parentid,
c2.id as two_id,c2.name as two_name,c2.parentid as two_parentid,c3.id as three_id,c3.name as three_name,c3.parentid as three_parentid from category as c1 left join category c2
on c1.id = c2.parentid left join category as c3 on c2.id = c3.parentid
where c1.parentid = '0'
order by
c1.orderby,c2.orderby,c3.orderby

    </select>

Service 查级联课程信息的数据方法
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

//查询课程分类数据的方法
    public CategoryNode findCategoryList(){
        CategoryNode categoryList = courseMapper.findCategoryList();
        return categoryList;
    }

Controller
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

@RestController
@RequestMapping("category/")
public class CategoryController {

    @Autowired
    private CourseService courseService;

    //查询课程分类信息
    @GetMapping("/list")
    public CategoryNode findCategoryList(){
        CategoryNode categoryList = courseService.findCategoryList();
        return categoryList;
    }
}

数据字典

2.3.1介绍
在新增课程界面需要选择课程等级、课程状态等,这些信息统一采用数据字典管理的方式。
本项目对一些业务的分类配置信息,比如:课程等级、课程状态、用户类型、用户状态等进行统一管理,通过在数
据库创建数据字典表来维护这些分类信息。
数据字典对系统的业务分类进行统一管理,并且也可以解决硬编码问题,比如添加课程时选择课程等级,下拉框中
的课程等级信息如果在页面硬编码将造成不易修改维护的问题,所以从数据字典表中获取,如果要修改名称则在数
据字典修改即可,提高系统的可维护性

2.3.2 数据模型
在mongodb中创建数据字典表sys_dictionary

学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
具体参数字典信息如下:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
字段说明如下:
d_name:字典名称
d_type:字典分类
d_value:字典数据
sd_name:项目名称
sd_id:项目id
sd_status:项目状态(1:可用,0不可用)
数据模型类:

@Data
@ToString
@Document(collection = "sys_dictionary")
public class SysDictionary {

    @Id
    private String id;

    @Field("d_name")
    private String dName;

    @Field("d_type")
    private String dType;

    @Field("d_value")
    private List<SysDictionaryValue> dValue;

}

写字典查询接口

API接口
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

@Api(value="功能等级的参数配置",description = "配置字典的取得")
public interface CmsSysDictionaryControllerApi {

    @ApiOperation("根据课程功能等级代码查询等级,代码200")
    public SysDictionary findSysDictionary(String type);
}

Dao字典模块:
在cms模块下创建数据库的dao、service等类。
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

public interface CmsSysDictionaryRepository extends MongoRepository<SysDictionary,String> {
    public SysDictionary findByDType(String type);
}

Service
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

//查询课程等级,传进来的是课程的等级代码,如课程是200
    public SysDictionary findSysDictionary(String type){
        SysDictionary byDType = cmsSysDictionaryRepository.findByDType(type);
        return byDType;
    }

Controller
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

@RestController
@RequestMapping("/sys")
public class CmsSysDictionaryController implements CmsSysDictionaryControllerApi {
    @Autowired
    private PageService pageService;

    @GetMapping("/dictionary/get/{dtype}")
    public SysDictionary findSysDictionary(@PathVariable String dtype){
        SysDictionary sysDictionary = pageService.findSysDictionary(dtype);
        return sysDictionary;
    }

}

新增课程基本信息的需求:

API 接口
创建课程添加提交接口:

学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典
添加课程的dao
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

public interface CourseBaseRepository extends JpaRepository<CourseBase,String> {
}

Service 新增课程基础信息:
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

//新增课程基础信息
    @Transactional
    public void addCourse(CourseBase courseBase){
        courseBaseRepository.save(courseBase);
    }

controller
学成在线day06,课程管理实战,PageHelper 分页插件原理,数据字典

//新增基础课程
    @Override
    @PostMapping("/coursebase/add")
    public ResponseResult addCourseBase(@RequestBody CourseBase courseBase) {
        System.err.println(courseBase);
        courseService.addCourse(courseBase);
        //保存成功
        return ResponseResult.SUCCESS();
    }

3 课程信息修改

课程添加成功进入课程管理页面,通过课程管理页面修改课程的基本信息、编辑课程图片、编辑课程营销信息等。
本小节实现修改课程。