1、项目概述

1.1、项目商业模式

2 商业模式.png

1.2、项目功能模块

3 项目功能模块.png

1.3、项目技术点介绍

4 项目技术点.png

2、项目搭建

2.1、前后端分离开发

2-前后端分离开发概念.png

2.2、数据库

1、创建数据库

  1. create database `guli`;

2、创建相应的表格并且初始化数据

2.3、创建项目

3 项目准备工作.png
1、创建guli_parent父工程
2、pom文件
2.1修改版本为2.2.1并设置为pom管理依赖版本

  1. <version>2.2.1.RELEASE</version>
  2. <packaging>pom</packaging>

2.2、导入依赖版本号

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <guli.version>0.0.1-SNAPSHOT</guli.version>
  4. <mybatis-plus.version>3.0.5</mybatis-plus.version>
  5. <velocity.version>2.0</velocity.version>
  6. <swagger.version>2.7.0</swagger.version>
  7. <aliyun.oss.version>2.8.3</aliyun.oss.version>
  8. <jodatime.version>2.10.1</jodatime.version>
  9. <poi.version>3.17</poi.version>
  10. <commons-fileupload.version>1.3.1</commons-fileupload.version>
  11. <commons-io.version>2.6</commons-io.version>
  12. <httpclient.version>4.5.1</httpclient.version>
  13. <jwt.version>0.7.0</jwt.version>
  14. <aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>
  15. <aliyun-sdk-oss.version>3.1.0</aliyun-sdk-oss.version>
  16. <aliyun-java-sdk-vod.version>2.15.2</aliyun-java-sdk-vod.version>
  17. <aliyun-java-vod-upload.version>1.4.11</aliyun-java-vod-upload.version>
  18. <aliyun-sdk-vod-upload.version>1.4.11</aliyun-sdk-vod-upload.version>
  19. <fastjson.version>1.2.28</fastjson.version>
  20. <gson.version>2.8.2</gson.version>
  21. <json.version>20170516</json.version>
  22. <commons-dbutils.version>1.7</commons-dbutils.version>
  23. <canal.client.version>1.1.0</canal.client.version>
  24. <docker.image.prefix>zx</docker.image.prefix>
  25. <cloud-alibaba.version>0.2.2.RELEASE</cloud-alibaba.version>
  26. </properties>

2.3、导入依赖管理

  1. <dependencyManagement>
  2. <dependencies>
  3. <!--Spring Cloud-->
  4. <dependency>
  5. <groupId>org.springframework.cloud</groupId>
  6. <artifactId>spring-cloud-dependencies</artifactId>
  7. <version>Hoxton.RELEASE</version>
  8. <type>pom</type>
  9. <scope>import</scope>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.cloud</groupId>
  13. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  14. <version>${cloud-alibaba.version}</version>
  15. <type>pom</type>
  16. <scope>import</scope>
  17. </dependency>
  18. <!--mybatis-plus 持久层-->
  19. <dependency>
  20. <groupId>com.baomidou</groupId>
  21. <artifactId>mybatis-plus-boot-starter</artifactId>
  22. <version>${mybatis-plus.version}</version>
  23. </dependency>
  24. <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
  25. <dependency>
  26. <groupId>org.apache.velocity</groupId>
  27. <artifactId>velocity-engine-core</artifactId>
  28. <version>${velocity.version}</version>
  29. </dependency>
  30. <!--swagger-->
  31. <dependency>
  32. <groupId>io.springfox</groupId>
  33. <artifactId>springfox-swagger2</artifactId>
  34. <version>${swagger.version}</version>
  35. </dependency>
  36. <!--swagger ui-->
  37. <dependency>
  38. <groupId>io.springfox</groupId>
  39. <artifactId>springfox-swagger-ui</artifactId>
  40. <version>${swagger.version}</version>
  41. </dependency>
  42. <!--aliyunOSS-->
  43. <dependency>
  44. <groupId>com.aliyun.oss</groupId>
  45. <artifactId>aliyun-sdk-oss</artifactId>
  46. <version>${aliyun.oss.version}</version>
  47. </dependency>
  48. <!--日期时间工具-->
  49. <dependency>
  50. <groupId>joda-time</groupId>
  51. <artifactId>joda-time</artifactId>
  52. <version>${jodatime.version}</version>
  53. </dependency>
  54. <!--xls-->
  55. <dependency>
  56. <groupId>org.apache.poi</groupId>
  57. <artifactId>poi</artifactId>
  58. <version>${poi.version}</version>
  59. </dependency>
  60. <!--xlsx-->
  61. <dependency>
  62. <groupId>org.apache.poi</groupId>
  63. <artifactId>poi-ooxml</artifactId>
  64. <version>${poi.version}</version>
  65. </dependency>
  66. <!--文件上传-->
  67. <dependency>
  68. <groupId>commons-fileupload</groupId>
  69. <artifactId>commons-fileupload</artifactId>
  70. <version>${commons-fileupload.version}</version>
  71. </dependency>
  72. <!--commons-io-->
  73. <dependency>
  74. <groupId>commons-io</groupId>
  75. <artifactId>commons-io</artifactId>
  76. <version>${commons-io.version}</version>
  77. </dependency>
  78. <!--httpclient-->
  79. <dependency>
  80. <groupId>org.apache.httpcomponents</groupId>
  81. <artifactId>httpclient</artifactId>
  82. <version>${httpclient.version}</version>
  83. </dependency>
  84. <dependency>
  85. <groupId>com.google.code.gson</groupId>
  86. <artifactId>gson</artifactId>
  87. <version>${gson.version}</version>
  88. </dependency>
  89. <!-- JWT -->
  90. <dependency>
  91. <groupId>io.jsonwebtoken</groupId>
  92. <artifactId>jjwt</artifactId>
  93. <version>${jwt.version}</version>
  94. </dependency>
  95. <!--aliyun-->
  96. <dependency>
  97. <groupId>com.aliyun</groupId>
  98. <artifactId>aliyun-java-sdk-core</artifactId>
  99. <version>${aliyun-java-sdk-core.version}</version>
  100. </dependency>
  101. <dependency>
  102. <groupId>com.aliyun.oss</groupId>
  103. <artifactId>aliyun-sdk-oss</artifactId>
  104. <version>${aliyun-sdk-oss.version}</version>
  105. </dependency>
  106. <dependency>
  107. <groupId>com.aliyun</groupId>
  108. <artifactId>aliyun-java-sdk-vod</artifactId>
  109. <version>${aliyun-java-sdk-vod.version}</version>
  110. </dependency>
  111. <dependency>
  112. <groupId>com.aliyun</groupId>
  113. <artifactId>aliyun-java-vod-upload</artifactId>
  114. <version>${aliyun-java-vod-upload.version}</version>
  115. </dependency>
  116. <dependency>
  117. <groupId>com.aliyun</groupId>
  118. <artifactId>aliyun-sdk-vod-upload</artifactId>
  119. <version>${aliyun-sdk-vod-upload.version}</version>
  120. </dependency>
  121. <dependency>
  122. <groupId>com.alibaba</groupId>
  123. <artifactId>fastjson</artifactId>
  124. <version>${fastjson.version}</version>
  125. </dependency>
  126. <dependency>
  127. <groupId>org.json</groupId>
  128. <artifactId>json</artifactId>
  129. <version>${json.version}</version>
  130. </dependency>
  131. <dependency>
  132. <groupId>commons-dbutils</groupId>
  133. <artifactId>commons-dbutils</artifactId>
  134. <version>${commons-dbutils.version}</version>
  135. </dependency>
  136. <dependency>
  137. <groupId>com.alibaba.otter</groupId>
  138. <artifactId>canal.client</artifactId>
  139. <version>${canal.client.version}</version>
  140. </dependency>
  141. </dependencies>
  142. </dependencyManagement>

2.4、maven创建子模块service

1、pom文件
1.1、改为pom管理依赖版本

  1. <packaging>pom</packaging>

1.2、导入依赖

  1. <dependencies>
  2. <!--<dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  5. </dependency>-->
  6. <!--hystrix依赖,主要是用 @HystrixCommand -->
  7. <!--<dependency>
  8. <groupId>org.springframework.cloud</groupId>
  9. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  10. </dependency>-->
  11. <!--服务注册-->
  12. <!-- <dependency>
  13. <groupId>org.springframework.cloud</groupId>
  14. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  15. </dependency>-->
  16. <!--服务调用-->
  17. <!-- <dependency>
  18. <groupId>org.springframework.cloud</groupId>
  19. <artifactId>spring-cloud-starter-openfeign</artifactId>
  20. </dependency>-->
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <!--mybatis-plus-->
  26. <dependency>
  27. <groupId>com.baomidou</groupId>
  28. <artifactId>mybatis-plus-boot-starter</artifactId>
  29. </dependency>
  30. <!--mysql-->
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. </dependency>
  35. <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
  36. <dependency>
  37. <groupId>org.apache.velocity</groupId>
  38. <artifactId>velocity-engine-core</artifactId>
  39. </dependency>
  40. <!--swagger-->
  41. <dependency>
  42. <groupId>io.springfox</groupId>
  43. <artifactId>springfox-swagger2</artifactId>
  44. </dependency>
  45. <dependency>
  46. <groupId>io.springfox</groupId>
  47. <artifactId>springfox-swagger-ui</artifactId>
  48. </dependency>
  49. <!--lombok用来简化实体类:需要安装lombok插件-->
  50. <dependency>
  51. <groupId>org.projectlombok</groupId>
  52. <artifactId>lombok</artifactId>
  53. </dependency>
  54. <!--xls-->
  55. <dependency>
  56. <groupId>org.apache.poi</groupId>
  57. <artifactId>poi</artifactId>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.apache.poi</groupId>
  61. <artifactId>poi-ooxml</artifactId>
  62. </dependency>
  63. <dependency>
  64. <groupId>commons-fileupload</groupId>
  65. <artifactId>commons-fileupload</artifactId>
  66. </dependency>
  67. <!--httpclient-->
  68. <dependency>
  69. <groupId>org.apache.httpcomponents</groupId>
  70. <artifactId>httpclient</artifactId>
  71. </dependency>
  72. <!--commons-io-->
  73. <dependency>
  74. <groupId>commons-io</groupId>
  75. <artifactId>commons-io</artifactId>
  76. </dependency>
  77. <!--gson-->
  78. <dependency>
  79. <groupId>com.google.code.gson</groupId>
  80. <artifactId>gson</artifactId>
  81. </dependency>
  82. <dependency>
  83. <groupId>junit</groupId>
  84. <artifactId>junit</artifactId>
  85. <version>4.12</version>
  86. </dependency>
  87. </dependencies>

3、讲师管理模块-后端

3.1、service下创建maven工程service_edu

3.2、application.properties

  1. # 服务端口
  2. server.port=8001
  3. # 服务名
  4. spring.application.name=service-edu
  5. # 环境设置:dev、test、prod
  6. spring.profiles.active=dev
  7. # mysql数据库连接
  8. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  9. spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
  10. spring.datasource.username=root
  11. spring.datasource.password=123456
  12. #mybatis日志
  13. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

4、代码生成器

4.1、导入依赖

  1. <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
  2. <dependency>
  3. <groupId>org.apache.velocity</groupId>
  4. <artifactId>velocity-engine-core</artifactId>
  5. </dependency>

4.2、代码生成器代码引入test包下

  1. public class CodeGenerator {
  2. @Test
  3. public void run() {
  4. // 1、创建代码生成器
  5. AutoGenerator mpg = new AutoGenerator();
  6. // 2、全局配置
  7. GlobalConfig gc = new GlobalConfig();
  8. String projectPath = System.getProperty("user.dir");
  9. //修改成绝对路径
  10. gc.setOutputDir("D:\\AAjava_project\\guli_parent\\service\\service_edu" + "/src/main/java");
  11. gc.setAuthor("testjava");//作者名
  12. gc.setOpen(false); //生成后是否打开资源管理器
  13. gc.setFileOverride(false); //重新生成时文件是否覆盖
  14. gc.setServiceName("%sService"); //去掉Service接口的首字母I
  15. //修改Long类型ID_WORKER,string类型ID_WORKER_STR
  16. gc.setIdType(IdType.ID_WORKER_STR); //主键策略
  17. gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型datetime转化Date
  18. gc.setSwagger2(true);//开启Swagger2模式
  19. mpg.setGlobalConfig(gc);
  20. // 3、数据源配置
  21. DataSourceConfig dsc = new DataSourceConfig();
  22. dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8");
  23. dsc.setDriverName("com.mysql.cj.jdbc.Driver");
  24. dsc.setUsername("root");
  25. //修改相应的密码
  26. dsc.setPassword("123456");
  27. dsc.setDbType(DbType.MYSQL);
  28. mpg.setDataSource(dsc);
  29. // 4、包配置
  30. PackageConfig pc = new PackageConfig();
  31. //修改相应的模块
  32. pc.setModuleName("eduservice"); //模块名
  33. //修改相应的包名
  34. pc.setParent("com.guang");
  35. pc.setController("controller");
  36. pc.setEntity("entity");
  37. pc.setService("service");
  38. pc.setMapper("mapper");
  39. mpg.setPackageInfo(pc);
  40. // 5、策略配置
  41. StrategyConfig strategy = new StrategyConfig();
  42. //修改成相应的表名
  43. strategy.setInclude("edu_teacher");
  44. strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
  45. strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
  46. strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
  47. strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
  48. strategy.setRestControllerStyle(true); //restful api风格控制器
  49. strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
  50. mpg.setStrategy(strategy);
  51. // 6、执行
  52. mpg.execute();
  53. }
  54. }

4.3、编写配置类

  1. @Configuration
  2. @MapperScan("com.guang.eduservice.mapper")
  3. public class TeacherConfig {
  4. /**
  5. * SQL 执行性能分析插件
  6. * 开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长
  7. */
  8. @Bean
  9. @Profile({"dev","test"})// 设置 dev test 环境开启
  10. public PerformanceInterceptor performanceInterceptor() {
  11. PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
  12. performanceInterceptor.setMaxTime(500);//500ms,超过此处设置的ms则sql不执行
  13. performanceInterceptor.setFormat(true);
  14. return performanceInterceptor;
  15. }
  16. }

4.4、编写controller(略)

4.5、返回结果时间的格式设置

  1. #返回json的全局时间格式
  2. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  3. spring.jackson.time-zone=GMT+8

4.6、整合swragger进行测试

1、service的pom中导入service

  1. <dependency>
  2. <groupId>com.guang</groupId>
  3. <artifactId>service_base</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </dependency>

2、解决service_edu启动时扫描不到swragger配置类

  1. //在主启动类上加上包扫描
  2. @ComponentScan(basePackages = {"com.guang"})

3、测试
localhost:8001/swagger-ui.html

4.7、统一结果返回

1、common_base引入common_utils依赖,由于service中引入了common_base,间接引入了common_utils

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.guang</groupId>
  4. <artifactId>common_utils</artifactId>
  5. <version>0.0.1-SNAPSHOT</version>
  6. </dependency>
  7. </dependencies>

5、整合swragger

5.1、guli_parent下创建公共模块common

5.2、修改为pom

  1. <packaging>pom</packaging>

5.3、导入依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <scope>provided </scope>
  6. </dependency>
  7. <!--mybatis-plus-->
  8. <dependency>
  9. <groupId>com.baomidou</groupId>
  10. <artifactId>mybatis-plus-boot-starter</artifactId>
  11. <scope>provided </scope>
  12. </dependency>
  13. <!--lombok用来简化实体类:需要安装lombok插件-->
  14. <dependency>
  15. <groupId>org.projectlombok</groupId>
  16. <artifactId>lombok</artifactId>
  17. <scope>provided </scope>
  18. </dependency>
  19. <!--swagger-->
  20. <dependency>
  21. <groupId>io.springfox</groupId>
  22. <artifactId>springfox-swagger2</artifactId>
  23. <scope>provided </scope>
  24. </dependency>
  25. <dependency>
  26. <groupId>io.springfox</groupId>
  27. <artifactId>springfox-swagger-ui</artifactId>
  28. <scope>provided </scope>
  29. </dependency>
  30. <!-- redis -->
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-data-redis</artifactId>
  34. </dependency>
  35. <!-- spring2.X集成redis所需common-pool2
  36. <dependency>
  37. <groupId>org.apache.commons</groupId>
  38. <artifactId>commons-pool2</artifactId>
  39. <version>2.6.0</version>
  40. </dependency>-->
  41. </dependencies>

5.4、common下创建service_base

1、创建配置类SwaggerConfig

  1. @Configuration
  2. @EnableSwagger2
  3. public class SwaggerConfig {
  4. @Bean
  5. public Docket webApiConfig(){
  6. return new Docket(DocumentationType.SWAGGER_2)
  7. .groupName("webApi")
  8. .apiInfo(webApiInfo())
  9. .select()
  10. .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
  11. .paths(Predicates.not(PathSelectors.regex("/error.*")))
  12. .build();
  13. }
  14. private ApiInfo webApiInfo(){
  15. return new ApiInfoBuilder()
  16. .title("网站-课程中心API文档")
  17. .description("本文档描述了课程中心微服务接口定义")
  18. .version("1.0")
  19. .contact(new Contact("Helen", "http://atguigu.com", "55317332@qq.com"))
  20. .build();
  21. }
  22. }

6、统一结果返回

6.1、common下创建common_utils

6.2、R类

  1. @Data
  2. public class R implements ResultCode {
  3. @ApiModelProperty(value = "是否成功")
  4. private boolean success;
  5. @ApiModelProperty(value = "返回状态码")
  6. private Integer code;
  7. @ApiModelProperty(value = "返回消息")
  8. private String message;
  9. @ApiModelProperty(value = "返回数据")
  10. private Map<String, Object> data = new HashMap<>();
  11. //无参构造私有化,只能通过类名访问
  12. private R() {
  13. }
  14. //成功调用的静态方法
  15. public static R OK() {
  16. R r = new R();
  17. r.code = SUCCESS;
  18. r.message = "成功";
  19. r.success = true;
  20. return r;
  21. }
  22. //失败调用的静态方法
  23. public static R ERROE() {
  24. R r = new R();
  25. r.code = ERROR;
  26. r.message = "失败";
  27. r.success = false;
  28. return r;
  29. }
  30. //参数错误调用的静态方法
  31. public static R ERROEPARAM() {
  32. R r = new R();
  33. r.code = 300;
  34. r.message = "参数不存在或参数错误";
  35. r.success = false;
  36. return r;
  37. }
  38. public R setSuccess(boolean success) {
  39. this.success = success;
  40. return this;
  41. }
  42. public R setCode(Integer code) {
  43. this.code = code;
  44. return this;
  45. }
  46. public R setMessage(String message) {
  47. this.message = message;
  48. return this;
  49. }
  50. public R setData(Map<String, Object> data) {
  51. this.data = data;
  52. return this;
  53. }
  54. }

6.3、ResultCode接口

  1. public interface ResultCode {
  2. public static Integer SUCCESS=200;
  3. public static Integer ERROR=400;
  4. }