1. 項目搭建
1.1 創建父工程
1.1.1 創建xuecheng-plus-project工程
1.1.2 導入依賴
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.3</version><relativePath/> <!-- lookup parent from repository --></parent><packaging>pom</packaging><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-parent</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-parent</name><description>xuecheng-plus-parent</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.1</version></dependency><!-- JWT依賴 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.12.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><!-- druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.23</version></dependency><!-- lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
1.1.3 創建Base工程
1.1.4 導入依賴
<?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><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-parent</artifactId><version>0.0.1-SNAPSHOT</version>
<!-- <relativePath/> <!– lookup parent from repository –>--><relativePath>../xuecheng-plus-parent</relativePath></parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-base</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-base</name><description>xuecheng-plus-base</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties>
<!-- <dependencies>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter</artifactId>-->
<!-- </dependency>--><!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<!-- </dependencies>--><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><!-- fastJson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency><!-- servlet Api 依賴 -->
<!-- <dependency>-->
<!-- <groupId>javax.servlet</groupId>-->
<!-- <artifactId>javax.servlet-api</artifactId>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>--><!-- 通用組件 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-validation</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-log4j2</artifactId>-->
<!-- </dependency>-->
<!-- <!–根據擴展名取mimetype–>-->
<!-- <dependency>-->
<!-- <groupId>com.j256.simplemagic</groupId>-->
<!-- <artifactId>simplemagic</artifactId>-->
<!-- <version>1.17</version>-->
<!-- </dependency>--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency>
<!-- <dependency>-->
<!-- <groupId>com.google.zxing</groupId>-->
<!-- <artifactId>core</artifactId>-->
<!-- <version>3.3.3</version>-->
<!-- </dependency>--><!-- <dependency>-->
<!-- <groupId>com.google.zxing</groupId>-->
<!-- <artifactId>javase</artifactId>-->
<!-- <version>3.3.3</version>-->
<!-- </dependency>--><dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-parameter-names</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jdk8</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
1.1.5 創建連接數據庫
? ? ? ? 使用Navicat使用192.168.101.65連接數據庫,
2. 內容管理模塊
2.1 需求分析
2.1.1 介紹
????????內容管理系統(content management system,CMS),是一種位于WEB前端(Web 服務器)和后端辦公系統或流程(內容創作、編輯)之間的軟件系統。內容的創作人員、編輯人員、發布人員使用內容管理系統來提交、修改、審批、發布內容。這里指的“內容”可能包括文件、表格、圖片、數據庫中的數據甚至視頻等一切你想要發布到Internet、Intranet以及Extranet網站的信息。
????????本項目作為一個大型的在線教育平臺,其內容管理模塊主要對課程及相關內容進行管理,包括:課程的基本信息、課程圖片、課程師資信息、課程的授課計劃、課程視頻、課程文檔等內容的管理。
2.1.2 業務流程
課程查詢的業務流程如下:
1、教學機構人員點擊課程管理首先進入課程查詢界面,如下:
2.在課程進行列表查詢頁面輸入查詢條件查詢課程信息
當不輸入查詢條件時輸入全部課程信息。
輸入查詢條件查詢符合條件的課程信息。
約束:本教學機構查詢本機構的課程信息。
整個流程分為前端、接口層、業務層三部分。
所以模塊工程的結構如下圖所示
- xuecheng-plus-content-api:接口工程,為前端提供接口。
- xuecheng-plus-content-service: 業務工程,為接口工程提供業務支撐。在這個模塊進行業務開發
- xuecheng-plus-content-model: 數據模型工程,存儲數據模型類、數據傳輸類型等
????????xuecheng-plus-content:內容管理模塊工程,負責聚合xuecheng-plus-content-api、xuecheng-plus-content-service、xuecheng-plus-content-model。
2.1.3 數據模型
下邊從查詢條件、查詢列表兩個方面分析數據模型
- 查詢條件:
包括:課程名稱、課程審核狀態、課程發布狀態
課程名稱:可以模糊搜索
課程審核狀態:未提交、已提交、審核通過、審核未通過
課程發布狀態:未發布、已發布、已下線
因為是分頁查詢所以查詢條件中還要包括當前頁碼、每頁顯示記錄數。
- 查詢結果:
查詢結果中包括:課程id、課程名稱、任務數、創建時間、是否付費、審核狀態、類型,操作
任務數:該課程所包含的課程計劃數,即課程章節數。
是否付費:課程包括免費、收費兩種。
????????類型:錄播、直播。
因為是分頁查詢所以查詢結果中還要包括總記錄數、當前頁、每頁顯示記錄數。
2.2 代碼開發
2.2.1 創建工程
1)創建xuecheng-plus-content工程
? ? ? ? pom文件👇
? ? ? ? 需要掃描同級xuecheng-plus-parent工程模塊的依賴,所以需要<relativePath>../xuecheng-plus-parent</relativePath>
<?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><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-parent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../xuecheng-plus-parent</relativePath><!-- <relativePath/> <!– lookup parent from repository –>--></parent><!-- 聚合管理子模塊 --><modules><module>xuecheng-plus-content-api</module><module>xuecheng-plus-content-service</module><module>xuecheng-plus-content-model</module></modules>
<!-- 打包方式 --><packaging>pom</packaging><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-content</name><description>xuecheng-plus-content</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2)在xuecheng-plus-content下創建xuecheng-plus-content-model數據模型工程
? ? ? ? pom文件👇
<?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>
<!-- 父工程為xuecheng-plus-content工程 --><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-model</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-content-model</name><description>xuecheng-plus-content-model</description><properties><java.version>17</java.version></properties>
<!-- 本工程依賴Base基礎工程 --><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-base</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3)在xuecheng-plus-content下創建xuecheng-plus-content-service接口實現工程
????????pom文件👇
<?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><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-service</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-content-service</name><description>xuecheng-plus-content-service</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-model</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
4)在xuecheng-plus-content下創建xuecheng-plus-content-api接口工程。
????????xuecheng-plus-content-api接口工程的父工程是xuecheng-plus-content,它依賴了xuecheng-plus-base基礎工程
????????pom文件👇?
<?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><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-api</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-content-api</name><description>xuecheng-plus-content-api</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
? ? ? ? 四個工程模塊如下:
2.2.2 生成po類實體類
2.2.3 接口設計
? ? ? ? 接口設計例子入下:
POST /content/course/list?pageNo=2&pageSize=1
Content-Type: application/json{"auditStatus": "202002","courseName": "","publishStatus":""
}
###成功響應結果
{"items": [{"id": 26,"companyId": 1232141425,"companyName": null,"name": "spring cloud實戰","users": "所有人","tags": null,"mt": "1-3","mtName": null,"st": "1-3-2","stName": null,"grade": "200003","teachmode": "201001","description": "本課程主要從四個章節進行講解: 1.微服務架構入門 2.spring cloud 基礎入門 3.實戰Spring Boot 4.注冊中心eureka。","pic": "https://cdn.educba.com/academy/wp-content/uploads/2018/08/Spring-BOOT-Interview-questions.jpg","createDate": "2019-09-04 09:56:19","changeDate": "2021-12-26 22:10:38","createPeople": null,"changePeople": null,"auditStatus": "202002","auditMind": null,"auditNums": 0,"auditDate": null,"auditPeople": null,"status": 1,"coursePubId": null,"coursePubDate": null}],"counts": 23,"page": 2,"pageSize": 1
}
- ?定義分頁查詢封裝實體類
????????由于分頁查詢這一類的接口在項目較多,這里針對分頁查詢的參數(當前頁碼、每頁顯示記錄數)單獨在xuecheng-plus-base基礎工程中定義。
package com.xuecheng.base.model;import lombok.Data;/*** @author Mr.M* @version 1.0* @description 分頁參數* @date 2022/9/6 11:05*/
@Data
public class PageParams {// 當前頁private Long pageNo = 1L;// 每頁顯示的條數private Long pageSize = 30L;}
- ?定義前端發送給后端的請求封裝實體類
package com.xuecheng.content.model.dto;import lombok.Data;/*** @author Mr.M* @version 1.0* @description 課程查詢參數* @date 2023/2/12 9:05*/
@Data
public class QueryCourseParamsDto {//審核狀態private String auditStatus;//課程名稱private String courseName;//發布狀態private String publishStatus;}
- 定義封裝后端響應給前端的數據的實體類
package com.xuecheng.base.model;import lombok.Data;import java.io.Serializable;
import java.util.List;/*** @description 翻頁查詢結果*/
@Data
public class PageResult<T> implements Serializable {// 數據列表private List<T> items;//總記錄數private long counts;//當前頁碼private long page;//每頁記錄數private long pageSize;
}
- 在api工程添加依賴
<?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><parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-api</artifactId><version>0.0.1-SNAPSHOT</version><name>xuecheng-plus-content-api</name><description>xuecheng-plus-content-api</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>io.swagger.core.v3</groupId><artifactId>swagger-annotations</artifactId><version>2.1.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j</artifactId>
<!-- <version>2.17.2</version>--></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2.2.4 定義接口
1)在api工程中定義controller方法
package com.xuecheng.content.api;import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.content.model.dto.QueryCourseParamsDto;
import com.xuecheng.content.model.po.CourseBase;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 課程信息接口*/
@RestController
public class CourseBaseInfoController {/*** 課程查詢接口* @param pageParams 分頁參數* @param queryCourseParamsDto 查詢條件* @return 課程列表*/@RequestMapping("/course/list")public PageResult<CourseBase> list(PageParams pageParams, QueryCourseParamsDto queryCourseParamsDto){return null;}
}
2)在content工程下創建ContentApplication啟動類?
package com.xuecheng.content;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author Mr.M* @version 1.0* @description 內容管理服務啟動類* @date 2023/2/12 8:09*/
@SpringBootApplication
public class ContentApplication {public static void main(String[] args) {SpringApplication.run(ContentApplication.class, args);}
}
3)添加配置文件
# application.yml
server:port: 63040servlet:context-path: /contentspring:application:name: content-apidatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.101.65:3306/xcplus_content?serverTimezone=UTC&useUnicode=true&useSSL=falseusername: rootpassword: mysql
問題:解決bootstrap.yml沒有小樹葉的問題
解決:?
? ? ? ??DTO數據傳輸對象、PO持久化對象,DTO用于接口層前端向業務層后端之間傳輸數據,PO數據庫表的實體類對象用于業務層與持久層之間傳輸數據,有些項目還會設置VO對象,VO對象用在前端與接口層之間傳輸數據