1.搭建父工程用springboot搭建
2.删除Src ,并引入依赖
<?xml version
="1.0" encoding
="UTF-8"?>
<project xmlns
="http://maven.apache.org/POM/4.0.0" xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi
:schemaLocation
="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion
>
<modules>
<module>common
</module
>
<module>service
</module
>
</modules
>
<parent>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-parent
</artifactId
>
<version>2.2.1.RELEASE
</version
>
<relativePath
/> <!-- lookup parent from repository
-->
</parent
>
<groupId>com
.lee
</groupId
>
<artifactId>aaa
-parent
</artifactId
>
<version>0.0.1-SNAPSHOT
</version
>
<packaging>pom
</packaging
>
<name>aaa
-parent
</name
>
<description>父工程版本管理
</description
>
<properties>
<java.version>1.8</java
.version
>
<guli.version>0.0.1-SNAPSHOT
</guli
.version
>
<mybatis
-plus
.version
>3.0.5</mybatis
-plus
.version
>
<velocity.version>2.0</velocity
.version
>
<swagger.version>2.7.0</swagger
.version
>
<aliyun
.oss
.version
>2.8.3</aliyun
.oss
.version
>
<jodatime.version>2.10.1</jodatime
.version
>
<poi.version>3.17</poi
.version
>
<commons
-fileupload
.version
>1.3.1</commons
-fileupload
.version
>
<commons
-io
.version
>2.6</commons
-io
.version
>
<httpclient.version>4.5.1</httpclient
.version
>
<jwt.version>0.7.0</jwt
.version
>
<aliyun
-java
-sdk
-core
.version
>4.3.3</aliyun
-java
-sdk
-core
.version
>
<aliyun
-sdk
-oss
.version
>3.1.0</aliyun
-sdk
-oss
.version
>
<aliyun
-java
-sdk
-vod
.version
>2.15.2</aliyun
-java
-sdk
-vod
.version
>
<aliyun
-java
-vod
-upload
.version
>1.4.11</aliyun
-java
-vod
-upload
.version
>
<aliyun
-sdk
-vod
-upload
.version
>1.4.11</aliyun
-sdk
-vod
-upload
.version
>
<fastjson.version>1.2.28</fastjson
.version
>
<gson.version>2.8.2</gson
.version
>
<json.version>20170516</json
.version
>
<commons
-dbutils
.version
>1.7</commons
-dbutils
.version
>
<canal
.client
.version
>1.1.0</canal
.client
.version
>
<docker
.image
.prefix
>zx
</docker
.image
.prefix
>
<cloud
-alibaba
.version
>0.2.2.RELEASE
</cloud
-alibaba
.version
>
</properties
>
<!--
dependencyManagement
:控制版本 为什么要用它控制版本:子模块保持版本一致,
因为有些依赖子模不需要。
-->
<dependencyManagement>
<dependencies>
<!--Spring Cloud
-->
<dependency>
<groupId>org
.springframework
.cloud
</groupId
>
<artifactId>spring
-cloud
-dependencies
</artifactId
>
<version>Hoxton
.RELEASE
</version
>
<type>pom
</type
>
<scope>import</scope
>
</dependency
>
<dependency>
<groupId>org
.springframework
.cloud
</groupId
>
<artifactId>spring
-cloud
-alibaba
-dependencies
</artifactId
>
<version>$
{cloud
-alibaba
.version
}</version
>
<type>pom
</type
>
<scope>import</scope
>
</dependency
>
<!--mybatis
-plus 持久层
-->
<dependency>
<groupId>com
.baomidou
</groupId
>
<artifactId>mybatis
-plus
-boot
-starter
</artifactId
>
<version>$
{mybatis
-plus
.version
}</version
>
</dependency
>
<!-- velocity 模板引擎
, Mybatis Plus 代码生成器需要
-->
<dependency>
<groupId>org
.apache
.velocity
</groupId
>
<artifactId>velocity
-engine
-core
</artifactId
>
<version>$
{velocity
.version
}</version
>
</dependency
>
<!--swagger
-->
<dependency>
<groupId>io
.springfox
</groupId
>
<artifactId>springfox
-swagger2
</artifactId
>
<version>$
{swagger
.version
}</version
>
</dependency
>
<!--swagger ui
-->
<dependency>
<groupId>io
.springfox
</groupId
>
<artifactId>springfox
-swagger
-ui
</artifactId
>
<version>$
{swagger
.version
}</version
>
</dependency
>
<!--aliyunOSS
-->
<dependency>
<groupId>com
.aliyun
.oss
</groupId
>
<artifactId>aliyun
-sdk
-oss
</artifactId
>
<version>$
{aliyun
.oss
.version
}</version
>
</dependency
>
<!--日期时间工具
-->
<dependency>
<groupId>joda
-time
</groupId
>
<artifactId>joda
-time
</artifactId
>
<version>$
{jodatime
.version
}</version
>
</dependency
>
<!--xls
-->
<dependency>
<groupId>org
.apache
.poi
</groupId
>
<artifactId>poi
</artifactId
>
<version>$
{poi
.version
}</version
>
</dependency
>
<!--xlsx
-->
<dependency>
<groupId>org
.apache
.poi
</groupId
>
<artifactId>poi
-ooxml
</artifactId
>
<version>$
{poi
.version
}</version
>
</dependency
>
<!--文件上传
-->
<dependency>
<groupId>commons
-fileupload
</groupId
>
<artifactId>commons
-fileupload
</artifactId
>
<version>$
{commons
-fileupload
.version
}</version
>
</dependency
>
<!--commons
-io
-->
<dependency>
<groupId>commons
-io
</groupId
>
<artifactId>commons
-io
</artifactId
>
<version>$
{commons
-io
.version
}</version
>
</dependency
>
<!--httpclient
-->
<dependency>
<groupId>org
.apache
.httpcomponents
</groupId
>
<artifactId>httpclient
</artifactId
>
<version>$
{httpclient
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.google
.code
.gson
</groupId
>
<artifactId>gson
</artifactId
>
<version>$
{gson
.version
}</version
>
</dependency
>
<!-- JWT
-->
<dependency>
<groupId>io
.jsonwebtoken
</groupId
>
<artifactId>jjwt
</artifactId
>
<version>$
{jwt
.version
}</version
>
</dependency
>
<!--aliyun
-->
<dependency>
<groupId>com
.aliyun
</groupId
>
<artifactId>aliyun
-java
-sdk
-core
</artifactId
>
<version>$
{aliyun
-java
-sdk
-core
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.aliyun
.oss
</groupId
>
<artifactId>aliyun
-sdk
-oss
</artifactId
>
<version>$
{aliyun
-sdk
-oss
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.aliyun
</groupId
>
<artifactId>aliyun
-java
-sdk
-vod
</artifactId
>
<version>$
{aliyun
-java
-sdk
-vod
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.aliyun
</groupId
>
<artifactId>aliyun
-java
-vod
-upload
</artifactId
>
<version>$
{aliyun
-java
-vod
-upload
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.aliyun
</groupId
>
<artifactId>aliyun
-sdk
-vod
-upload
</artifactId
>
<version>$
{aliyun
-sdk
-vod
-upload
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.alibaba
</groupId
>
<artifactId>fastjson
</artifactId
>
<version>$
{fastjson
.version
}</version
>
</dependency
>
<dependency>
<groupId>org
.json
</groupId
>
<artifactId>json
</artifactId
>
<version>$
{json
.version
}</version
>
</dependency
>
<dependency>
<groupId>commons
-dbutils
</groupId
>
<artifactId>commons
-dbutils
</artifactId
>
<version>$
{commons
-dbutils
.version
}</version
>
</dependency
>
<dependency>
<groupId>com
.alibaba
.otter
</groupId
>
<artifactId>canal
.client
</artifactId
>
<version>$
{canal
.client
.version
}</version
>
</dependency
>
</dependencies
>
</dependencyManagement
>
<build>
<plugins>
<plugin>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-maven
-plugin
</artifactId
>
</plugin
>
</plugins
>
</build
>
</project
>
3.创建子工程,用maven工程搭建 1.common 2.service
4.common子工程里引入依赖
<?xml version
="1.0" encoding
="UTF-8"?>
<project xmlns
="http://maven.apache.org/POM/4.0.0"
xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi
:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>aaa
-parent
</artifactId
>
<groupId>com
.lee
</groupId
>
<version>0.0.1-SNAPSHOT
</version
>
</parent
>
<modelVersion>4.0.0</modelVersion
>
<artifactId>common
</artifactId
>
<packaging>pom
</packaging
>
<modules>
<module>base
-service
</module
>
<module>util
-service
</module
>
</modules
>
<dependencies>
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-web
</artifactId
>
<scope>provided
</scope
>
</dependency
>
<!--mybatis
-plus
-->
<dependency>
<groupId>com
.baomidou
</groupId
>
<artifactId>mybatis
-plus
-boot
-starter
</artifactId
>
<scope>provided
</scope
>
</dependency
>
<!--lombok用来简化实体类:需要安装lombok插件
-->
<dependency>
<groupId>org
.projectlombok
</groupId
>
<artifactId>lombok
</artifactId
>
<scope>provided
</scope
>
</dependency
>
<!--swagger
-->
<dependency>
<groupId>io
.springfox
</groupId
>
<artifactId>springfox
-swagger2
</artifactId
>
<scope>provided
</scope
>
</dependency
>
<dependency>
<groupId>io
.springfox
</groupId
>
<artifactId>springfox
-swagger
-ui
</artifactId
>
<scope>provided
</scope
>
</dependency
>
<!-- redis
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-data
-redis
</artifactId
>
</dependency
>
<!-- spring2
.X集成redis所需common
-pool2
<dependency>
<groupId>org
.apache
.commons
</groupId
>
<artifactId>commons
-pool2
</artifactId
>
<version>2.6.0</version
>
</dependency
>-->
</dependencies
>
</project
>
5.service子工程里引入依赖
<?xml version
="1.0" encoding
="UTF-8"?>
<project xmlns
="http://maven.apache.org/POM/4.0.0"
xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi
:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>aaa
-parent
</artifactId
>
<groupId>com
.lee
</groupId
>
<version>0.0.1-SNAPSHOT
</version
>
</parent
>
<modelVersion>4.0.0</modelVersion
>
<artifactId>service
</artifactId
>
<packaging>pom
</packaging
>
<modules>
<module>edu
-service
</module
>
<module>acl
-service
</module
>
<module>cms
-service
</module
>
<module>msm
-service
</module
>
<module>order
-service
</module
>
<module>oss
-service
</module
>
<module>statistics
-service
</module
>
<module>ucenter
-service
</module
>
<module>vod
-service
</module
>
</modules
>
<dependencies>
<dependency>
<groupId>com
.lee
</groupId
>
<artifactId>base
-service
</artifactId
>
<version>0.0.1-SNAPSHOT
</version
>
<scope>compile
</scope
>
</dependency
>
<dependency>
<groupId>com
.lee
</groupId
>
<artifactId>util
-service
</artifactId
>
<version>0.0.1-SNAPSHOT
</version
>
</dependency
>
<!--<dependency>
<groupId>org
.springframework
.cloud
</groupId
>
<artifactId>spring
-cloud
-starter
-netflix
-ribbon
</artifactId
>
</dependency
>-->
<!--hystrix依赖,主要是用
@HystrixCommand 后面我们改为sentinel
-->
<!--<dependency>
<groupId>org
.springframework
.cloud
</groupId
>
<artifactId>spring
-cloud
-starter
-netflix
-hystrix
</artifactId
>
</dependency
>-->
<!--服务注册
-->
<!-- <dependency>
<groupId>org
.springframework
.cloud
</groupId
>
<artifactId>spring
-cloud
-starter
-alibaba
-nacos
-discovery
</artifactId
>
</dependency
>-->
<!--服务调用
-->
<!-- <dependency>
<groupId>org
.springframework
.cloud
</groupId
>
<artifactId>spring
-cloud
-starter
-openfeign
</artifactId
>
</dependency
>-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-web
</artifactId
>
</dependency
>
<!--mybatis
-plus
-->
<dependency>
<groupId>com
.baomidou
</groupId
>
<artifactId>mybatis
-plus
-boot
-starter
</artifactId
>
</dependency
>
<!--mysql
-->
<dependency>
<groupId>mysql
</groupId
>
<artifactId>mysql
-connector
-java
</artifactId
>
</dependency
>
<!-- velocity 模板引擎
, Mybatis Plus 代码生成器需要
-->
<dependency>
<groupId>org
.apache
.velocity
</groupId
>
<artifactId>velocity
-engine
-core
</artifactId
>
</dependency
>
<!--swagger
-->
<dependency>
<groupId>io
.springfox
</groupId
>
<artifactId>springfox
-swagger2
</artifactId
>
</dependency
>
<dependency>
<groupId>io
.springfox
</groupId
>
<artifactId>springfox
-swagger
-ui
</artifactId
>
</dependency
>
<!--lombok用来简化实体类:需要安装lombok插件
-->
<dependency>
<groupId>org
.projectlombok
</groupId
>
<artifactId>lombok
</artifactId
>
</dependency
>
<!--xls
-->
<dependency>
<groupId>org
.apache
.poi
</groupId
>
<artifactId>poi
</artifactId
>
</dependency
>
<dependency>
<groupId>org
.apache
.poi
</groupId
>
<artifactId>poi
-ooxml
</artifactId
>
</dependency
>
<dependency>
<groupId>commons
-fileupload
</groupId
>
<artifactId>commons
-fileupload
</artifactId
>
</dependency
>
<!--httpclient
-->
<dependency>
<groupId>org
.apache
.httpcomponents
</groupId
>
<artifactId>httpclient
</artifactId
>
</dependency
>
<!--commons
-io
-->
<dependency>
<groupId>commons
-io
</groupId
>
<artifactId>commons
-io
</artifactId
>
</dependency
>
<!--gson
-->
<dependency>
<groupId>com
.google
.code
.gson
</groupId
>
<artifactId>gson
</artifactId
>
</dependency
>
<dependency>
<groupId>junit
</groupId
>
<artifactId>junit
</artifactId
>
<version>4.12</version
>
</dependency
>
</dependencies
>
</project
>
6.common base-service
引入依赖:
<dependencies>
<dependency>
<groupId>com
.lee
</groupId
>
<artifactId>util
-service
</artifactId
>
<version>0.0.1-SNAPSHOT
</version
>
</dependency
>
</dependencies
>
7.配置类config 1.MyBatisConfig 2.SwaggerConfig
MyBatisConfig
@Configuration
public class MyBatisConfig {
@Bean
public ISqlInjector
getISqlInjector(){
return new LogicSqlInjector();
}
@Bean
public PaginationInterceptor
getPaginationInterceptor(){
return new PaginationInterceptor();
}
}
SwaggerConfig
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket
webApiConfig(){
return new Docket(DocumentationType
.SWAGGER_2
)
.groupName("webApi")
.apiInfo(webApiInfo())
.select()
.paths(Predicates
.not(PathSelectors
.regex("/admin/.*")))
.paths(Predicates
.not(PathSelectors
.regex("/error.*")))
.build();
}
private ApiInfo
webApiInfo() {
return new ApiInfoBuilder()
.title("教育系统API文档")
.description("本文档描述了教育系统微服务接口定义")
.version("1.0")
.contact(new Contact("AAA", "http://www.aaa.com", "2300316070@qq.com"))
.build();
}
}
8.配置异常类exception 1.AAAException 2.GlobalException
AAAException
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
public class AAAException extends RuntimeException{
private Integer code
;
private String msg
;
}
GlobalException
@RestControllerAdvice
public class GlobalException {
@ExceptionHandler
public R
handlerException(Exception e
){
return R
.error().data("msg",e
.getMessage());
}
}
9.util-service返回结果实体类
R
@Data
@NoArgsConstructor
@ApiModel("返回结果实体类")
public class R {
private Boolean success
;
private String message
;
private Integer code
;
private Map
<String,Object> data
= new HashMap<>();
public static R
ok(){
R r
= new R();
r
.setCode(2000);
r
.setSuccess(true);
r
.setMessage("成功");
return r
;
}
public static R
error(){
R r
= new R();
r
.setSuccess(false);
r
.setCode(2001);
r
.setMessage("失败");
return r
;
}
public R
data(String key
,Object value
){
this.data
.put(key
, value
);
return this;
}
public R
data(Map
<String,Object> map
){
this.setData(map
);
return this;
}
}
配置mysql.db数据库
CREATE TABLE `edu_chapter
` (
`id
` char(19) NOT NULL COMMENT '章节ID',
`course_id
` char(19) NOT NULL COMMENT '课程ID',
`title
` varchar(50) NOT NULL COMMENT '章节名称',
`sort
` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '显示排序',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`),
KEY `idx_course_id
` (`course_id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT
=COMPACT
COMMENT='课程';
INSERT INTO `edu_chapter
` VALUES ('1','14','第一章:HTML',0,'2019-01-01 12:27:40','2019-01-01 12:55:30'),('1181729226915577857','18','第七章:I/O流',70,'2019-10-09 08:32:58','2019-10-09 08:33:20'),('1192252428399751169','1192252213659774977','第一章节',0,'2019-11-07 09:28:25','2019-11-07 09:28:25'),('15','18','第一章:Java入门',0,'2019-01-01 12:27:40','2019-10-09 09:13:19'),('3','14','第二章:CSS',0,'2019-01-01 12:55:35','2019-01-01 12:27:40'),('32','18','第二章:控制台输入和输出',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('44','18','第三章:控制流',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('48','18','第四章:类的定义',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('63','18','第五章:数组',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('64','18','第六章:继承',61,'2019-01-01 12:27:40','2019-10-09 08:32:47');
CREATE TABLE `edu_comment
` (
`id
` char(19) NOT NULL COMMENT '讲师ID',
`course_id
` varchar(19) NOT NULL DEFAULT '' COMMENT '课程id',
`teacher_id
` char(19) NOT NULL DEFAULT '' COMMENT '讲师id',
`member_id
` varchar(19) NOT NULL DEFAULT '' COMMENT '会员id',
`nickname
` varchar(50) DEFAULT NULL COMMENT '会员昵称',
`avatar
` varchar(255) DEFAULT NULL COMMENT '会员头像',
`content
` varchar(500) DEFAULT NULL COMMENT '评论内容',
`is_deleted
` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`),
KEY `idx_course_id
` (`course_id
`),
KEY `idx_teacher_id
` (`teacher_id
`),
KEY `idx_member_id
` (`member_id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='评论';
INSERT INTO `edu_comment
` VALUES ('1194499162790211585','1192252213659774977','1189389726308478977','1','小三123','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','课程很好',0,'2019-11-13 14:16:08','2019-11-13 14:16:08'),('1194898406466420738','1192252213659774977','1189389726308478977','1','小三123','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','11',0,'2019-11-14 16:42:35','2019-11-14 16:42:35'),('1194898484388200450','1192252213659774977','1189389726308478977','1','小三123','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','111',0,'2019-11-14 16:42:53','2019-11-14 16:42:53'),('1195251020861317122','1192252213659774977','1189389726308478977','1',NULL,NULL,'2233',0,'2019-11-15 16:03:45','2019-11-15 16:03:45'),('1195251382720700418','1192252213659774977','1189389726308478977','1',NULL,NULL,'4455',0,'2019-11-15 16:05:11','2019-11-15 16:05:11'),('1195252819177570306','1192252213659774977','1189389726308478977','1','小三1231','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','55',0,'2019-11-15 16:10:53','2019-11-15 16:10:53'),('1195252899448160258','1192252213659774977','1189389726308478977','1','小三1231','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','55',0,'2019-11-15 16:11:13','2019-11-15 16:11:13'),('1195252920587452417','1192252213659774977','1189389726308478977','1','小三1231','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','223344',0,'2019-11-15 16:11:18','2019-11-15 16:11:18'),('1195262128095559681','14','1189389726308478977','1','小三1231','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','11',0,'2019-11-15 16:47:53','2019-11-15 16:47:53'),('1196264505170767874','1192252213659774977','1189389726308478977','1','小三1231','http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132','666666',0,'2019-11-18 11:10:58','2019-11-18 11:10:58');
CREATE TABLE `edu_course
` (
`id
` char(19) NOT NULL COMMENT '课程ID',
`teacher_id
` char(19) NOT NULL COMMENT '课程讲师ID',
`subject_id
` char(19) NOT NULL COMMENT '课程专业ID',
`subject_parent_id
` char(19) NOT NULL COMMENT '课程专业父级ID',
`title
` varchar(50) NOT NULL COMMENT '课程标题',
`price
` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '课程销售价格,设置为0则可免费观看',
`lesson_num
` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '总课时',
`cover
` varchar(255) CHARACTER SET utf8
NOT NULL COMMENT '课程封面图片路径',
`buy_count
` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '销售数量',
`view_count
` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '浏览数量',
`version
` bigint(20) unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁',
`status` varchar(10) NOT NULL DEFAULT 'Draft' COMMENT '课程状态 Draft未发布 Normal已发布',
`is_deleted
` tinyint(3) DEFAULT NULL COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`),
KEY `idx_title
` (`title
`),
KEY `idx_subject_id
` (`subject_id
`),
KEY `idx_teacher_id
` (`teacher_id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT
=COMPACT
COMMENT='课程';
INSERT INTO `edu_course
` VALUES ('1192252213659774977','1189389726308478977','1178214681139539969','1178214681118568449','java基础课程:test',0.01,2,'https://guli-file-190513.oss-cn-beijing.aliyuncs.com/cover/default.gif',4,387,1,'Normal',0,'2019-11-07 09:27:33','2019-11-18 13:35:03'),('14','1189389726308478977','1101348944971091969','1101348944920760321','XHTML CSS2 JS整站制作教程课程学习',0.00,3,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/d0086eb0-f2dc-45f7-bba1-744d95e5be0f.jpg',3,44,15,'Normal',0,'2018-04-02 18:33:34','2019-11-16 21:21:45'),('15','1189389726308478977','1101348944971091969','1101348944920760321','HTML5入门课程学习',0.00,23,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/22997b8e-3606-4d2e-9b4f-09f48418b6e4.jpg',0,51,17,'Normal',0,'2018-04-02 18:34:32','2019-11-12 10:19:20'),('18','1189389726308478977','1178214681139539969','1178214681118568449','Java精品课程',0.01,20,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/06/866e9aca-b530-4f71-a690-72d4a4bfd1e7.jpg',151,737,6,'Normal',0,'2018-04-02 21:28:46','2019-11-18 11:14:52');
CREATE TABLE `edu_course_collect
` (
`id
` char(19) NOT NULL COMMENT '收藏ID',
`course_id
` char(19) NOT NULL COMMENT '课程讲师ID',
`member_id
` char(19) NOT NULL DEFAULT '' COMMENT '课程专业ID',
`is_deleted
` tinyint(3) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT
=COMPACT
COMMENT='课程收藏';
INSERT INTO `edu_course_collect
` VALUES ('1196269345666019330','1192252213659774977','1',1,'2019-11-18 11:30:12','2019-11-18 11:30:12');
CREATE TABLE `edu_course_description
` (
`id
` char(19) NOT NULL COMMENT '课程ID',
`description
` text COMMENT '课程简介',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='课程简介';
INSERT INTO `edu_course_description
` VALUES ('1104870479077879809','<p>11</p>','2019-03-11 06:23:44','2019-03-11 06:23:44'),('1192252213659774977','<p>测试</p>','2019-11-07 09:27:33','2019-11-13 16:21:28'),('14','','2019-03-13 06:04:43','2019-03-13 06:05:33'),('15','','2019-03-13 06:03:33','2019-03-13 06:04:22'),('18','<p>本套Java视频完全针对零基础学员,课堂实录,自发布以来,好评如潮!Java视频中注重与学生互动,讲授幽默诙谐、细致入微,覆盖Java基础所有核心知识点,同类Java视频中也是代码量大、案例多、实战性强的。同时,本Java视频教程注重技术原理剖析,深入JDK源码,辅以代码实战贯穿始终,用实践驱动理论,并辅以必要的代码练习。</p>\n<p>------------------------------------</p>\n<p>视频特点:</p>\n<p>通过学习本Java视频教程,大家能够真正将Java基础知识学以致用、活学活用,构架Java编程思想,牢牢掌握\"源码级\"的Javase核心技术,并为后续JavaWeb等技术的学习奠定扎实基础。<br /><br />1.通俗易懂,细致入微:每个知识点高屋建瓴,深入浅出,简洁明了的说明问题<br />2.具实战性:全程真正代码实战,涵盖上百个企业应用案例及练习<br />3.深入:源码分析,更有 Java 反射、动态代理的实际应用等<br />4.登录尚硅谷官网,技术讲师免费在线答疑</p>','2019-03-06 18:06:36','2019-10-30 19:58:36');
CREATE TABLE `edu_subject
` (
`id
` char(19) NOT NULL COMMENT '课程类别ID',
`title
` varchar(10) NOT NULL COMMENT '类别名称',
`parent_id
` char(19) NOT NULL DEFAULT '0' COMMENT '父ID',
`sort
` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`),
KEY `idx_parent_id
` (`parent_id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT
=COMPACT
COMMENT='课程科目';
INSERT INTO `edu_subject
` VALUES ('1178214681118568449','后端开发','0',1,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681139539969','Java','1178214681118568449',1,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681181483010','前端开发','0',3,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681210843137','JavaScript','1178214681181483010',4,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681231814658','云计算','0',5,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681252786178','Docker','1178214681231814658',5,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681294729217','Linux','1178214681231814658',6,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681324089345','系统/运维','0',7,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681353449473','Linux','1178214681324089345',7,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681382809602','Windows','1178214681324089345',8,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681399586817','数据库','0',9,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681428946945','MySQL','1178214681399586817',9,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681454112770','MongoDB','1178214681399586817',10,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681483472898','大数据','0',11,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681504444418','Hadoop','1178214681483472898',11,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681529610242','Spark','1178214681483472898',12,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681554776066','人工智能','0',13,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681584136193','Python','1178214681554776066',13,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681613496321','编程语言','0',14,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178214681626079234','Java','1178214681613496321',14,'2019-09-29 15:47:25','2019-09-29 15:47:25'),('1178585108407984130','Python','1178214681118568449',2,'2019-09-30 16:19:22','2019-09-30 16:19:22'),('1178585108454121473','HTML/CSS','1178214681181483010',3,'2019-09-30 16:19:22','2019-09-30 16:19:22');
CREATE TABLE `edu_teacher
` (
`id
` char(19) NOT NULL COMMENT '讲师ID',
`name
` varchar(20) NOT NULL COMMENT '讲师姓名',
`intro
` varchar(500) NOT NULL DEFAULT '' COMMENT '讲师简介',
`career
` varchar(500) DEFAULT NULL COMMENT '讲师资历,一句话说明讲师',
`level` int(10) unsigned NOT NULL COMMENT '头衔 1高级讲师 2首席讲师',
`avatar
` varchar(255) DEFAULT NULL COMMENT '讲师头像',
`sort
` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`is_deleted
` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`),
UNIQUE KEY `uk_name
` (`name
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='讲师';
INSERT INTO `edu_teacher
` VALUES ('1','张三','近年主持国家自然科学基金(6项)、江苏省重大科技成果转化项目(5项)、江苏省产学研前瞻性联合研究项目(3项)、省工业科技支撑、省高技术、省自然科学基金等省部级及其企业的主要科研项目40多个,多个项目在企业成功转化,产生了较好的经济、社会和环境效益。积极开展产学研科技合作,并与省内16家企业建立了江苏省研究生工作站,其中6家为江苏省优秀研究生工作站','高级',1,'https://guli-file-190513.oss-cn-beijing.aliyuncs.com/avatar/default.jpg',0,0,'2019-10-30 14:18:46','2019-11-12 13:36:36'),('1189389726308478977','晴天','高级讲师简介','高级讲师资历',2,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/10/30/de47ee9b-7fec-43c5-8173-13c5f7f689b2.png',1,0,'2019-10-30 11:53:03','2019-10-30 11:53:03'),('1189390295668469762','李刚','高级讲师简介','高级讲师',2,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/10/30/b8aa36a2-db50-4eca-a6e3-cc6e608355e0.png',2,0,'2019-10-30 11:55:19','2019-11-12 13:37:52'),('1189426437876985857','王二','高级讲师简介','高级讲师',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/11/08/e44a2e92-2421-4ea3-bb49-46f2ec96ef88.png',0,0,'2019-10-30 14:18:56','2019-11-12 13:37:35'),('1189426464967995393','王五','高级讲师简介','高级讲师',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/10/30/65423f14-49a9-4092-baf5-6d0ef9686a85.png',0,0,'2019-10-30 14:19:02','2019-11-12 13:37:18'),('1192249914833055746','李四','高级讲师简介','高级讲师',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/11/07/91871e25-fd83-4af6-845f-ea8d471d825d.png',0,0,'2019-11-07 09:18:25','2019-11-12 13:37:01'),('1192327476087115778','1222-12-12','1111','11',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/11/08/5805c6cd-c8ad-4a77-aafd-d2e083bfd8a4.png',0,1,'2019-11-07 14:26:37','2019-11-11 16:26:26'),('1195337453429129218','test','sdfsdf','sdfdf',1,'https://guli-file-190513.oss-cn-beijing.aliyuncs.com/avatar/default.jpg',0,1,'2019-11-15 21:47:12','2019-11-15 21:47:27');
CREATE TABLE `edu_video
` (
`id
` char(19) NOT NULL COMMENT '视频ID',
`course_id
` char(19) NOT NULL COMMENT '课程ID',
`chapter_id
` char(19) NOT NULL COMMENT '章节ID',
`title
` varchar(50) NOT NULL COMMENT '节点名称',
`video_source_id
` varchar(100) DEFAULT NULL COMMENT '云端视频资源',
`video_original_name
` varchar(100) DEFAULT NULL COMMENT '原始文件名称',
`sort
` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段',
`play_count
` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '播放次数',
`is_free
` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否可以试听:0收费 1免费',
`duration
` float NOT NULL DEFAULT '0' COMMENT '视频时长(秒)',
`status` varchar(20) NOT NULL DEFAULT 'Empty' COMMENT 'Empty未上传 Transcoding转码中 Normal正常',
`size
` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '视频源文件大小(字节)',
`version
` bigint(20) unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁',
`gmt_create
` datetime NOT NULL COMMENT '创建时间',
`gmt_modified
` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id
`),
KEY `idx_course_id
` (`course_id
`),
KEY `idx_chapter_id
` (`chapter_id
`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT
=COMPACT
COMMENT='课程视频';
INSERT INTO `edu_video
` VALUES ('1182499307429339137','18','32','第一节','','',0,0,0,0,'',0,1,'2019-10-11 11:32:59','2019-10-11 11:57:38'),('1185312444399071234','14','1','12','','',0,0,0,0,'Empty',0,1,'2019-10-19 05:51:23','2019-10-19 05:51:33'),('1189434737808990210','18','44','测试','','',1,0,0,0,'Empty',0,1,'2019-10-30 14:51:55','2019-10-30 14:51:55'),('1189471423678939138','18','1181729226915577857','test','2b887dc9584d4dc68908780ec57cd3b9','视频',1,0,0,0,'Empty',0,1,'2019-10-30 17:17:41','2019-10-30 17:17:41'),('1189476403626409986','18','1181729226915577857','22','5155c73dc112475cbbddccf4723f7cef','视频.mp4',0,0,0,0,'Empty',0,1,'2019-10-30 17:37:29','2019-10-30 17:37:29'),('1192252824606289921','1192252213659774977','1192252428399751169','第一课时','756cf06db9cb4f30be85a9758b19c645','eae2b847ef8503b81f5d5593d769dde2.mp4',0,0,0,0,'Empty',0,1,'2019-11-07 09:29:59','2019-11-07 09:29:59'),('1192628092797730818','1192252213659774977','1192252428399751169','第二课时','2a02d726622f4c7089d44cb993c531e1','eae2b847ef8503b81f5d5593d769dde2.mp4',0,0,1,0,'Empty',0,1,'2019-11-08 10:21:10','2019-11-08 10:21:22'),('1192632495013380097','1192252213659774977','1192252428399751169','第三课时','4e560c892fdf4fa2b42e0671aa42fa9d','eae2b847ef8503b81f5d5593d769dde2.mp4',0,0,1,0,'Empty',0,1,'2019-11-08 10:38:40','2019-11-08 10:38:40'),('1194117638832111617','1192252213659774977','1192252428399751169','第四课时','4e560c892fdf4fa2b42e0671aa42fa9d','eae2b847ef8503b81f5d5593d769dde2.mp4',0,0,0,0,'Empty',0,1,'2019-11-12 13:00:05','2019-11-12 13:00:05'),('1196263770832023554','1192252213659774977','1192252428399751169','第五课时','27d21158b0834cb5a8d50710937de330','eae2b847ef8503b81f5d5593d769dde2.mp4',5,0,0,0,'Empty',0,1,'2019-11-18 11:08:03','2019-11-18 11:08:03'),('17','18','15','第一节:Java简介','196116a6fee742e1ba9f6c18f65bd8c1','1',1,1000,1,100,'Draft',0,1,'2019-01-01 13:08:57','2019-10-11 11:26:39'),('18','18','15','第二节:表达式和赋值语句','2d99b08ca0214909899910c9ba042d47','7 - How Do I Find Time for My ',2,999,1,100,'Draft',0,1,'2019-01-01 13:09:02','2019-03-08 03:30:27'),('19','18','15','第三节:String类','51120d59ddfd424cb5ab08b44fc8b23a','eae2b847ef8503b81f5d5593d769dde2.mp4',3,888,0,100,'Draft',0,1,'2019-01-01 13:09:05','2019-11-12 12:50:45'),('20','18','15','第四节:程序风格','2a38988892d84df598752226c50f3fa3','00-day10总结.avi',4,666,0,100,'Draft',0,1,'2019-01-01 13:09:05','2019-10-11 09:20:09');
10.service 服务层 通过CodeGenerator代码生产工具
CodeGenerator
package com
.lee
.test
;
import com
.baomidou
.mybatisplus
.annotation
.DbType
;
import com
.baomidou
.mybatisplus
.annotation
.IdType
;
import com
.baomidou
.mybatisplus
.generator
.AutoGenerator
;
import com
.baomidou
.mybatisplus
.generator
.config
.DataSourceConfig
;
import com
.baomidou
.mybatisplus
.generator
.config
.GlobalConfig
;
import com
.baomidou
.mybatisplus
.generator
.config
.PackageConfig
;
import com
.baomidou
.mybatisplus
.generator
.config
.StrategyConfig
;
import com
.baomidou
.mybatisplus
.generator
.config
.rules
.DateType
;
import com
.baomidou
.mybatisplus
.generator
.config
.rules
.NamingStrategy
;
import org
.junit
.Test
;
public class CodeGenerator {
@Test
public void main1() {
AutoGenerator mpg
= new AutoGenerator();
GlobalConfig gc
= new GlobalConfig();
String projectPath
= System
.getProperty("user.dir");
System
.out
.println(projectPath
);
gc
.setOutputDir(projectPath
+ "/src/main/java");
gc
.setAuthor("lee");
gc
.setOpen(false);
gc
.setFileOverride(true);
gc
.setServiceName("%sService");
gc
.setIdType(IdType
.ID_WORKER_STR
);
gc
.setDateType(DateType
.ONLY_DATE
);
gc
.setSwagger2(true);
mpg
.setGlobalConfig(gc
);
DataSourceConfig dsc
= new DataSourceConfig();
dsc
.setUrl("jdbc:mysql://localhost:3306/aaa?serverTimezone=GMT%2B8");
dsc
.setDriverName("com.mysql.cj.jdbc.Driver");
dsc
.setUsername("root");
dsc
.setPassword("123456");
dsc
.setDbType(DbType
.MYSQL
);
mpg
.setDataSource(dsc
);
PackageConfig pc
= new PackageConfig();
pc
.setModuleName("eduservice");
pc
.setParent("com.lee");
pc
.setController("controller");
pc
.setEntity("entity");
pc
.setService("service");
pc
.setMapper("mapper");
mpg
.setPackageInfo(pc
);
StrategyConfig strategy
= new StrategyConfig();
strategy
.setInclude("edu_course_collect");
strategy
.setNaming(NamingStrategy
.underline_to_camel
);
strategy
.setTablePrefix("edu" + "_");
strategy
.setColumnNaming(NamingStrategy
.underline_to_camel
);
strategy
.setEntityLombokModel(true);
strategy
.setRestControllerStyle(true);
strategy
.setControllerMappingHyphenStyle(true);
mpg
.setStrategy(strategy
);
mpg
.execute();
}
}
11.配置application.yml文件
application.yml
#端口号
server
:
port
: 7001
#服务名称
spring
:
application
:
name
: edu
-service
datasource
:
driver
-class-name
: com
.mysql
.cj
.jdbc
.Driver
url
: jdbc
:mysql
://localhost
:3306/aaa
?serverTimezone
=GMT
%2B8
username
: root
password
: 123456
#指定xml文件的路径
mybatis
-plus
:
mapper
-locations
: classpath
:com
/lee
/eduservice
/mapper
/xml
12.配置主启动类
EduServiceMainApp
@SpringBootApplication
@MapperScan(basePackages
= {"com.lee.eduservice.mapper"})
@EnableSwagger2
public class EduServiceMainApp {
public static void main(String
[] args
) {
SpringApplication
.run(EduServiceMainApp
.class,args
);
}
}
13.因为版本问题不最新版本,这里如果要使用注解@TableLogic需要进行一下操作 注解@TableLogic 逻辑删除,伪删除
@TableLogic
@TableLogic
private Boolean isDeleted
;
需要配置的config文件,标明当前是伪删除的配置类
@Configuration
public class MyBatisConfig {
@Bean
public ISqlInjector
getISqlInjector(){
return new LogicSqlInjector();
}
}
14.分页插件 PaginationInterceptor
@Configuration
public class MyBatisConfig {
@Bean
public PaginationInterceptor
getPaginationInterceptor(){
return new PaginationInterceptor();
}
}
15.vo.TeacherQuery
16.controller层实现检索查询
17.OSS
1.创建一个bucket
如果想使用java代码来完成文件上传,可以参考文档。