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代码来完成文件上传,可以参考文档。