目录
1,分析
1.1:环境搭建
1.1.1:数据库
CREATE DATABASE zx_edu_course;
USE zx_edu_course;
CREATE TABLE `edu_subject` (
`id` VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '课程科目ID',
`title` VARCHAR(10) NOT NULL COMMENT '科目名称',
`parent_id` VARCHAR(32) NOT NULL DEFAULT '0' COMMENT '父ID',
`sort` INT(10) NOT NULL DEFAULT 0 COMMENT '排序字段',
`gmt_create` DATETIME NOT NULL COMMENT '创建时间',
`gmt_modified` DATETIME NOT NULL COMMENT '更新时间'
) COMMENT = '课程科目';
INSERT INTO `edu_subject` VALUES ('1', '云计算', '0', 0, '2020-06-26 09:41:21', '2020-02-20 23:25:58');
INSERT INTO `edu_subject` VALUES ('2', '系统/运维', '0', 0, '2020-02-20 23:29:59', '2020-02-20 23:29:59');
INSERT INTO `edu_subject` VALUES ('3', '数据库', '0', 0, '2020-02-20 23:30:13', '2020-02-20 23:30:13');
INSERT INTO `edu_subject` VALUES ('4', '服务器', '0', 0, '2020-02-20 23:30:19', '2020-02-20 23:30:19');
INSERT INTO `edu_subject` VALUES ('5', 'MySQL', '3', 1, '2020-02-20 23:30:13', '2020-02-20 23:30:13');
INSERT INTO `edu_subject` VALUES ('6', 'Oracle', '3', 2, '2020-02-20 23:30:13', '2020-02-20 23:30:13');
INSERT INTO `edu_subject` VALUES ('7', 'Tomcat', '4', 1, '2020-02-20 23:30:13', '2020-02-20 23:30:13');
INSERT INTO `edu_subject` VALUES ('8', 'Nginx ', '4', 2, '2020-02-20 23:30:13', '2020-02-20 23:30:13');
INSERT INTO `edu_subject` VALUES ('9', 'MySQL优化', '5', 1, '2020-02-20 23:30:13', '2020-02-20 23:30:13');
1.1.2:后端:环境
创建项目:zx_service_course
pom文件
<dependencies>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos 客户端 -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!-- feign 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--自定义项目-->
<dependency>
<groupId>com.czxy.zx</groupId>
<artifactId>zx_common_fx</artifactId>
</dependency>
<dependency>
<groupId>com.czxy.zx</groupId>
<artifactId>zx_domain_fx</artifactId>
</dependency>
<!-- redis 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- JavaMail 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- MQ 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!--开发者工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
</dependencies>
application.yml
# 服务端口号 server: port: 9020 # 服务名 spring: application: name: course-service datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/zx_edu_course?useUnicode=true&characterEncoding=utf8 username: root password: root druid: #druid 连接池配置 initial-size: 1 #初始化连接池大小 min-idle: 1 #最小连接数 max-active: 20 #最大连接数 test-on-borrow: true #获取连接时候验证,会影响性能 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos服务地址 redis: database: 0 #数据库索引,取值0-15,表示16个库可选择 host: 127.0.0.1 #服务器地址 port: 6379 #服务器连接端口号 mail: host: smtp.126.com #发送邮件服务器 username: itcast_lt@126.com #账号 password: 1qaz2wsx #密码 default-encoding: UTF-8 #默认编码时 rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest virtualHost: / devtools: restart: enabled: true #设置开启热部署 additional-paths: src/main/java #重启目录 exclude: WEB-INF/** freemarker: cache: false #页面不加载缓存,修改即时生效 #开启log4j打印SQL语句 logging: level: com: czxy: mapper: debug # mp日志打印 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
启动类:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class CourseApplication {
public static void main(String[] args) {
SpringApplication.run(CourseApplication.class,args);
}
}
拷贝配置
1.1.3:后端:基本模块
创建JavaBean
package com.czxy.zx.domain;
@Data
@TableName("edu_subject")
public class EduSubject{
@TableId(type = IdType.ASSIGN_UUID)
//课程科目ID
private String id;
//科目名称
private String title;
//父ID
private String parentId;
//排序字段
private Integer sort;
//创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
//更新时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date gmtModified;
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY) //生成json数据,不包含空元素
private List<EduSubject> children = new ArrayList<>();
}
创建mapper
@Mapper
public interface EduSubjectMapper extends BaseMapper<EduSubject> {
}
创建service
接口
public interface EduSubjectService extends IService<EduSubject> {
}
实现类
@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {
}
创建controller
@RequestMapping("/course")
@RestController
public class EduSubjectController {
@Resource
private EduSubjectService eduSubjectService;
@GetMapping
public BaseResult findAll(){
System.out.println("查询所有");
QueryWrapper<EduSubject> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("parent_id");
List<EduSubject> eduSubjectList = eduSubjectService.list(queryWrapper);
//提供list集合用来缓存一级目录
ArrayList<EduSubject> resultsubject = new ArrayList<>();
//创建map集合用来缓存
Map<String,EduSubject> subjectMap = new HashMap<>();
//进行遍历查询结果
for (EduSubject eduSubject : eduSubjectList) {
//通过id进行判断map集合中是否保存
EduSubject parentsubject = subjectMap.get(eduSubject.getParentId());
//进行判断父是否存在,如果不存在存放在list集合中为一级目录
if (parentsubject == null){
resultsubject.add(eduSubject);
}else {
//如果存在说明是二级的通过id找到父亲放入父亲的属性中
parentsubject.getChildren().add(eduSubject);
}
subjectMap.put(eduSubject.getId(),eduSubject);
}
System.out.println(resultsubject);
return BaseResult.ok("查询成功",resultsubject);
}
}
1.1.4:前端:课程板块
创建路由模块
/** When your routing table is too long, you can split it into small modules **/
import Layout from '@/layout' //导入布局组件
const courseRouter = {
path: '/course', //一级路径
component: Layout, //页面布局,固定写法
redirect: '/course/subjectList', //访问/teacher重定向的页面位置
name: '课程管理',
meta: {
title: '课程管理', //左侧一级菜单的菜单名
icon: 'table', //左侧一级菜单的图标,取值参考:src/icons/svg目录下文件名
// roles: ['admin']
},
children: [
{
path: 'subjectList', //二级路径
component: () => import('@/views/edu/course/SubjectList'), //页面位置
name: '科目列表',
meta: { //二级菜单的菜单名称
title: '科目列表',
icon: 'list',
// roles: ['admin']
}
},
]
}
export default courseRouter
创建 subjectList.vue 页面
<template>
<div>
<el-table
v-loading="loading"
:data="result"
row-key="title"
:tree-props="{children: 'children'}"
style="width: 50%">
<el-table-column
prop="title"
label="科目名称"
width="180">
</el-table-column>
<el-table-column
prop="sort"
label="排序"
width="180">
</el-table-column>
<el-table-column
prop="gmtCreate"
label="添加时间"
width="150">
</el-table-column>
<el-table-column
prop="gmtModified"
label="修改时间"
width="150">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="">
<el-button
size="mini">编辑</el-button>
<el-button
size="mini"
type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
//导入ajax
import { findAll } from "@/api/edu/course"
export default {
name: 'WORKSPACE_NAMESubjectList',
data() {
return {
result:[],
loading:false
};
},
mounted() {
this.selectAll()
},
methods: {
async selectAll() {
this.loading = true
let baseResult = await findAll()
this.result = baseResult.data
this.loading = false
}
},
};
</script>
<style lang="scss" scoped>
</style>
配置路由
2,查询所有课程
2.1:后端实现
-
修改 EduSubjectController
package com.czxy.zx.course.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.czxy.zx.course.service.EduSubjectService;
import com.czxy.zx.domain.EduSubject;
import com.czxy.zx.vo.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RequestMapping("/course")
@RestController
public class EduSubjectController {
@Resource
private EduSubjectService eduSubjectService;
@GetMapping
public BaseResult findAll(){
System.out.println("查询所有");
QueryWrapper<EduSubject> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("parent_id");
List<EduSubject> eduSubjectList = eduSubjectService.list(queryWrapper);
//提供list集合用来缓存一级目录
ArrayList<EduSubject> resultsubject = new ArrayList<>();
//创建map集合用来缓存
Map<String,EduSubject> subjectMap = new HashMap<>();
//进行遍历查询结果
for (EduSubject eduSubject : eduSubjectList) {
//通过id进行判断map集合中是否保存
EduSubject parentsubject = subjectMap.get(eduSubject.getParentId());
//进行判断父是否存在,如果不存在存放在list集合中为一级目录
if (parentsubject == null){
resultsubject.add(eduSubject);
}else {
//如果存在说明是二级的通过id找到父亲放入父亲的属性中
parentsubject.getChildren().add(eduSubject);
}
subjectMap.put(eduSubject.getId(),eduSubject);
}
System.out.println(resultsubject);
return BaseResult.ok("查询成功",resultsubject);
}
}
2.2:前端ajax发送
import axios from ‘@/utils/request’
// 查询所有课程科目
export function findAllSub() {
return axios.get(‘/course-service/subject’);
}
2.3:前端实现
修改 @/views/edu/course/subjectList.vue
<template>
<div>
<el-table
v-loading="loading"
:data="result"
row-key="title"
:tree-props="{children: 'children'}"
style="width: 50%">
<el-table-column
prop="title"
label="科目名称"
width="180">
</el-table-column>
<el-table-column
prop="sort"
label="排序"
width="180">
</el-table-column>
<el-table-column
prop="gmtCreate"
label="添加时间"
width="150">
</el-table-column>
<el-table-column
prop="gmtModified"
label="修改时间"
width="150">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="">
<el-button
size="mini">编辑</el-button>
<el-button
size="mini"
type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
//导入ajax
import { findAll } from "@/api/edu/course"
export default {
name: 'WORKSPACE_NAMESubjectList',
data() {
return {
result:[],
loading:false
};
},
mounted() {
this.selectAll()
},
methods: {
async selectAll() {
this.loading = true
let baseResult = await findAll()
this.result = baseResult.data
this.loading = false
}
},
};
</script>
<style lang="scss" scoped>
</style>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120836.html