黑馬暢購商城-最新升級修復版-md講義+視訊+筆記等
第1章 框架搭建
學習目標
- 瞭解電商
- 瞭解暢購架構
- 瞭解暢購工程結構
- 暢購工程搭建
- 商品微服務搭建
- 品牌增刪改查
1. 走進電商
暢購商城-最新升級修復版-.md講義 視訊、筆記
暢購靜態原型 暢購資料庫表 暢購原始碼課件
虛擬機器:CentOS-changgou 資料同步依賴工程,等等
----------2020全套最新:
連結:https://pan.baidu.com/s/1HjLTdMGKAjy5_LkfWcuQkQ
提取碼:vto5
------------該分享,僅供學習交流!!!
1.1 電商行業分析
近年來,世界經濟正向數字化轉型,大力發展數字經濟成為全球共識。黨的十九大報告明確提出要建設“數字中國”“網路強國”,我國數字經濟發展進入新階段,市場規模位居全球第二,數字經濟與實體經濟深度融合,有力促進了供給側結構性改革。電子商務是數字經濟的重要組成部分,是數字經濟最活躍、最集中的表現形式之一。2017年,在政府和市場共同推動下,我國電子商務發展更加註重效率、質量和創新,取得了一系列新的進展,在壯大數字經濟、共建“一帶一路”、助力鄉村振興、帶動創新創業、促進經濟轉型升級等諸多方面發揮了重要作用,成為我國經濟增長的新動力。
2018天貓全天成交額記錄
1.2 電商系統技術特點
-
技術新
-
技術範圍廣
-
分散式
-
高併發、叢集、負載均衡、高可用
-
海量資料
-
業務複雜
-
系統安全
1.3 主要電商模式
B2B
1 2 3
B2B ( Business to Business)是指進行電子商務交易的供需雙方都是商家(或企業、公司),她(他)們使用了網際網路的技術或各種商務網路平臺,完成商務交易的過程。電子商務是現代 B2B marketing的一種具體主要的表現形式。 案例:阿里巴巴、慧聰網
C2C
1 2 3
C2C即 Customer(Consumer) to Customer(Consumer),意思就是消費者個人間的電子商務行為。比如一個消費者有一臺電腦,通過網路進行交易,把它出售給另外一個消費者,此種交易型別就稱為C2C電子商務。 案例:淘寶、易趣、瓜子二手車
B2C
1 2 3
B2C是Business-to-Customer的縮寫,而其中文簡稱為“商對客”。“商對客”是電子商務的一種模式,也就是通常說的直接面向消費者銷售產品和服務商業零售模式。這種形式的電子商務一般以網路零售業為主,主要藉助於網際網路開展線上銷售活動。B2C即企業通過網際網路為消費者提供一個新型的購物環境——網上商店,消費者通過網路在網上購物、網上支付等消費行為。 案例:唯品會、樂蜂網
C2B
1 2 3 4 5
C2B(Consumer to Business,即消費者到企業),是網際網路經濟時代新的商業模式。這一模式改變了原有生產者(企業和機構)和消費者的關係,是一種消費者貢獻價值(Create Value), 企業和機構消費價值(Consume Value)。 C2B模式和我們熟知的供需模式(DSM, Demand SupplyModel)恰恰相反,真正的C2B 應該先有消費者需求產生而後有企業生產,即先有消費者提出需求,後有生產企業按需求組織生產。通常情況為消費者根據自身需求定製產品和價格,或主動參與產品設計、生產和定價,產品、價格等彰顯消費者的個性化需求,生產企業進行定製化生產。 案例:海爾商城、尚品宅配
O2O
1 2 3
O2O即Online To Offline(線上離線/線上到線下),是指將線下的商務機會與網際網路結合,讓網際網路成為線下交易的平臺,這個概念最早來源於美國。O2O的概念非常廣泛,既可涉及到線上,又可涉及到線下,可以通稱為O2O。主流商業管理課程均對O2O這種新型的商業模式有所介紹及關注。 案例:美團、餓了嗎
F2C
F2C指的是Factory to customer,即從廠商到消費者的電子商務模式。
B2B2C
1 2 3 4
B2B2C是一種電子商務型別的網路購物商業模式,B是BUSINESS的簡稱,C是CUSTOMER的簡稱,第一個B指的是商品或服務的供應商,第二個B指的是從事電子商務的企業,C則是表示消費者。 案例:京東商城、天貓商城 注:我們《暢購電商系統開發》課程採用B2C模式,之後的專案實戰《品優購電商系統開發實戰》採用B2B2C模式。
2. 暢購-需求分析與系統設計
2.1 需求分析
網站前臺靜態原型演示,開啟資料\頁面\前臺\project-changgou-portal-fis3-master
,首頁index.html
網站管理後臺靜態原型演示:http://czpm.itcast.cn/青橙後臺/#g=1&p=後臺首頁
開啟資料\頁面\後臺\project-changgou-cmm-fis3-master\pages
,首頁all-medical-main.html
2.2 系統設計
暢購商城屬於B2C電商模式,運營商將自己的產品釋出到網站上,會員註冊後,在網站上將商品新增到購物車,並且下單,完成線上支付,使用者還可以參與秒殺搶購。
2.2.1 前後端分離
網站後臺的部分採用前後端分離方式。
以前的JavaWeb專案大多數都是java程式設計師又當爹又當媽,又搞前端,又搞後端。隨著時代的發展,漸漸的許多大中小公司開始把前後端的界限分的越來越明確,前端工程師只管前端的事情,後端工程師只管後端的事情。正所謂術業有專攻,一個人如果什麼都會,那麼他畢竟什麼都不精。
對於後端java工程師:
把精力放在設計模式,spring+springmvc,linux,mysql事務隔離與鎖機制,mongodb,http/tcp,多執行緒,分散式架構,彈性計算架構,微服務架構,java效能優化,以及相關的專案管理等等。
對於前端工程師:
把精力放在html5,css3,vuejs,webpack,nodejs,Google V8引擎,javascript多執行緒,模組化,面向切面程式設計,設計模式,瀏覽器相容性,效能優化等等。
我們在本課程中提供與專案課程配套的管理後臺的前端程式碼,但是不講解前端的內容。這樣我們會將更多的精力放在**後端程式碼**的開發上!
2.2.2 技術架構
2.2.3 系統架構圖
3 暢購-框架搭建
3.1 環境準備
(1)VMware Workstation Pro安裝centos7 映象
(2)安裝docker
(3)拉取mySQL映象,並建立容器
(4)客戶端連線mysql容器,建庫建表(建庫建表語句在資原始檔夾中提供)
虛擬機器資料:
-
虛擬機器IP:192.168.211.132
-
虛擬機器賬號:root 密碼:123456
- 資料庫埠:3306
- 資料庫賬號:root 密碼:123456
資料庫指令碼:資料\資料庫指令碼
3.2 專案結構說明
結構說明:
changgou-gateway
閘道器模組,根據網站的規模和需要,可以將綜合邏輯相關的服務用閘道器路由組合到一起。在這裡還可以做鑑權和限流相關操作。
changgou-service
微服務模組,該模組用於存放所有獨立的微服務工程。
changgou-service_api
對應工程的JavaBean、Feign、以及Hystrix配置,該工程主要對外提供依賴。
changgou-transaction-fescar
分散式事務模組,將分散式事務抽取到該工程中,任何工程如需要使用分散式事務,只需依賴該工程即可。
changgou-web
web服務工程,對應功能模組如需要呼叫多個微服務,可以將他們寫入到該模組中,例如網站後臺、網站前臺等
3.3 公共工程搭建
3.3.1 父工程搭建
建立父工程 changgou-parent ,pom.xml檔案中增加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.changgou</groupId> <artifactId>changgou-parent</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <skipTests>true</skipTests> </properties> <!--依賴包--> <dependencies> <!--測試包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--fastjson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> <!--swagger文件--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> <!-- http://localhost:9011/swagger-ui.html --> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
刪除src資料夾
3.3.2 其他公共模組搭建
建立changgou-gateway、changgou-service、changgou-service-api、changgou-web工程,工程全部為pom工程,並將所有工程的src檔案刪除。
pom.xml中打pom包
<packaging>pom</packaging>
專案結構如下:
3.4 Eureka微服務搭建
3.4.1 pom.xml依賴
建立模組changgou-eureka ,pom.xml引入依賴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<?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>changgou_parent</artifactId> <groupId>com.changgou</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>changgou_eureka</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
3.4.2 appliation.yml配置
建立配置檔案application.yml
1 2 3 4 5 6 7 8 9 10
server: port: 7001 eureka: instance: hostname: 127.0.0.1 client: register-with-eureka: false #是否將自己註冊到eureka中 fetch-registry: false #是否從eureka中獲取資訊 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3.4.3 啟動類配置
建立包com.changgou 包下建立啟動類EurekaApplication,程式碼如下:
上圖程式碼如下:
1 2 3 4 5 6 7 8
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class); } }
測試訪問http://localhost:7001/
,效果如下:
3.5 公共模組搭建
3.5.1 pom.xml依賴
建立公共子模組changgou-common,pom.xml引入依賴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
<?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>changgou-parent</artifactId> <groupId>com.changgou</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>changgou-common</artifactId> <dependencies> <!--web起步依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- redis 使用--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--eureka-client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--微信支付--> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version> </dependency> <!--httpclient支援--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> </dependencies> </project>
公共子模組引入這些依賴後,其他微服務引入changgou-common後也自動引入了這些依賴
3.5.2 常用物件
建立entity包 ,在entity包下建立返回狀態碼實體類
1 2 3 4 5 6 7 8 9 10 11 12
/** * 返回碼 */ public class StatusCode { public static final int OK = 20000;//成功 public static final int ERROR = 20001;//失敗 public static final int LOGINERROR = 20002;//使用者名稱或密碼錯誤 public static final int ACCESSERROR = 20003;//許可權不足 public static final int REMOTEERROR = 20004;//遠端呼叫失敗 public static final int REPERROR = 20005;//重複操作 public static final int NOTFOUNDERROR = 20006;//沒有對應的搶購資料 }
包下建立類Result用於微服務返回結果給前端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/** * 返回結果實體類 */ public class Result<T> { private boolean flag;//是否成功 private Integer code;//返回碼 private String message;//返回訊息 private T data;//返回資料 public Result(boolean flag, Integer code, String message, Object data) { this.flag = flag; this.code = code; this.message = message; this.data = (T) data; } public Result(boolean flag, Integer code, String message) { this.flag = flag; this.code = code; this.message = message; } public Result() { this.flag = true; this.code = StatusCode.OK; this.message = "操作成功!"; } // getter and setter..... }
在entity包下建立類用於承載分頁的資料結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/** * 分頁結果類 */ public class PageResult<T> { private Long total;//總記錄數 private List<T> rows;//記錄 public PageResult(Long total, List<T> rows) { this.total = total; this.rows = rows; } public PageResult() { } //getter and setter ...... }
當然,我們還可以將其他工具類都一起倒入到工程中,以後會用到,將資料\工具類
中的所有類直接匯入到entity包下。
3.6 資料訪問工程搭建
建立公共模組changgou-common-db ,pom檔案引入依賴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
<?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>changgou-parent</artifactId> <groupId>com.changgou</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>changgou-common-db</artifactId> <!--依賴--> <dependencies> <!--對changgou-common的依賴--> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--通用mapper起步依賴--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.4</version> </dependency> <!--MySQL資料庫驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--mybatis分頁外掛--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> </dependencies> </project>
這個公共模組是連線mysql資料庫的公共微服務模組,所以需要連線mysql的微服務都繼承自此工程。
3.7 商品微服務搭建
商品微服務主要是實現對商品的增刪改查相關操作,以及商品相關資訊的增刪改查。
3.7.1 公共元件工程搭建
建立changgou-service-api子模組changgou-service-goods-api,並將資料\javabean\changgou-service-goods-api
中的Pojo匯入到工程中。
修改父工程changgou-service-api的pom.xml,新增persistence-api
和changgou-common
的依賴,程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<dependencies> <!--通用的common--> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--每個工程都有Pojo,都需要用到該包對應的註解--> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> </dependencies>
3.7.2 微服務工程搭建
修改changgou-service的pom.xml引入changgou-common-db
的依賴,程式碼如下:
1 2 3 4 5 6 7 8
<!--依賴--> <dependencies> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou-common-db</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
在changgou-service中建立changgou-service-goods ,pom.xml引入依賴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<?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>changgou-service</artifactId> <groupId>com.changgou</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>changgou-service-goods</artifactId> <!--依賴--> <dependencies> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou-service-goods-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
在resources下建立配置檔案application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
server: port: 18081 spring: application: name: goods datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.211.132:3306/changgou_goods?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: 123456 eureka: client: service-url: defaultZone: http://127.0.0.1:7001/eureka instance: prefer-ip-address: true feign: hystrix: enabled: true mybatis: configuration: map-underscore-to-camel-case: true mapper-locations: classpath:mapper/*Mapper.xml type-aliases-package: com.changgou.goods.pojo
在包com.changgou.goods 包下建立啟動類GoodsApplication,程式碼如下:
上圖程式碼如下:
1 2 3 4 5 6 7 8
@SpringBootApplication @EnableEurekaClient @MapperScan(basePackages = {"com.changgou.goods.dao"}) public class GoodsApplication { public static void main(String[] args) { SpringApplication.run(GoodsApplication.class); } }
注意:@MapperScan是tk.mybatis.spring.annotation
包下的,用於掃描Mapper介面
啟動changgou-service-goods
再訪問<http://localhost:7001/>
效果如下:
==4 商品微服務-品牌增刪改查==
4.1 需求分析
建立商品微服務,實現對品牌表的增刪改查功能。具體包括
(1)查詢全部列表資料
(2)根據ID查詢實體資料
(3)增加
(4)修改
(5)刪除
(6)條件查詢
(7)分頁查詢
(8)分頁+條件查詢
(9)公共異常處理
4.2 表結構分析
品牌表:tb_brand
欄位名稱 | 欄位含義 | 欄位型別 | 欄位長度 | 備註 |
---|---|---|---|---|
id | 品牌id | INT | ||
name | 品牌名稱 | VARCHAR | ||
image | 品牌圖片地址 | VARCHAR | ||
letter | 品牌的首字母 | CHAR | ||
seq | 排序 | INT |
4.3 程式碼實現
上面品牌表對應Brand實體類
1 2 3 4 5 6 7 8 9 10 11
@Table(name="tb_brand") public class Brand implements Serializable{ @Id private Integer id;//品牌id private String name;//品牌名稱 private String image;//品牌圖片地址 private String letter;//品牌的首字母 private Integer seq;//排序 // getter and setter .....(省略) }
@Table和@Id都是JPA註解,@Table用於配置表與實體類的對映關係,@Id用於標識主鍵屬性。
4.3.1 品牌列表
(1)Dao建立
在changgou-service-goods微服務下建立com.changgou.goods.dao.BrandMapper介面,程式碼如下:
1 2
public interface BrandMapper extends Mapper<Brand> { }
繼承了Mapper介面,就自動實現了增刪改查的常用方法。
(2)業務層
建立com.changgou.goods.service.BrandService介面,程式碼如下:
1 2 3 4 5 6 7 8
public interface BrandService { /*** * 查詢所有品牌 * @return */ List<Brand> findAll(); }
建立com.changgou.goods.service.impl.BrandServiceImpl實現類,程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@Service public class BrandServiceImpl { @Autowired private BrandMapper brandMapper; /** * 全部資料 * @return */ public List<Brand> findAll(){ return brandMapper.selectAll(); } }
(3)控制層
控制層 com.changgou.goods包下建立controller包 ,包下建立類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
@RestController @RequestMapping("/brand") @CrossOrigin public class BrandController { @Autowired private BrandService brandService; /*** * 查詢全部資料 * @return */ @GetMapping public Result<Brand> findAll(){ List<Brand> brandList = brandService.findAll(); return new Result<Brand>(true, StatusCode.OK,"查詢成功",brandList) ; } }
測試:http://localhost:18081/brand
4.3.2 根據ID查詢品牌
(1)業務層
修改com.changgou.goods.service.BrandService介面,新增根據ID查詢品牌資料方法,程式碼如下:
1 2 3 4 5 6
/** * 根據ID查詢 * @param id * @return */ Brand findById(Integer id);
修改com.changgou.goods.service.impl.BrandServiceImpl新增方法,程式碼如下:
1 2 3 4 5 6 7 8 9
/** * 根據ID查詢 * @param id * @return */ @Override public Brand findById(Integer id){ return brandMapper.selectByPrimaryKey(id); }
(2)控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10 11
/*** * 根據ID查詢品牌資料 * @param id * @return */ @GetMapping("/{id}") public Result<Brand> findById(@PathVariable Integer id){ //根據ID查詢 Brand brand = brandService.findById(id); return new Result<Brand>(true,StatusCode.OK,"查詢成功",brand); }
測試:http://localhost:18081/brand/14026
4.3.3 新增品牌
(1)業務層
修改com.changgou.goods.service.BrandService,新增方法
1 2 3 4 5
/*** * 新增品牌 * @param brand */ void add(Brand brand);
修改com.changgou.goods.service.impl.BrandServiceImpl,新增增加品牌方法程式碼如下:
1 2 3 4 5 6 7 8
/** * 增加 * @param brand */ @Override public void add(Brand brand){ brandMapper.insertSelective(brand); }
(2) 控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10
/*** * 新增品牌資料 * @param brand * @return */ @PostMapping public Result add(@RequestBody Brand brand){ brandService.add(brand); return new Result(true,StatusCode.OK,"新增成功"); }
測試:http://localhost:18081/brand
4.3.4 修改品牌
(1)業務層
需改com.changgou.goods.service.BrandService,新增修改品牌方法,程式碼如下:
1 2 3 4 5
/*** * 修改品牌資料 * @param brand */ void update(Brand brand);
修改com.changgou.goods.service.impl.BrandServiceImpl,新增修改品牌方法,程式碼如下:
1 2 3 4 5 6 7 8
/** * 修改 * @param brand */ @Override public void update(Brand brand){ brandMapper.updateByPrimaryKeySelective(brand); }
(2)控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*** * 修改品牌資料 * @param brand * @param id * @return */ @PutMapping(value="/{id}") public Result update(@RequestBody Brand brand,@PathVariable Integer id){ //設定ID brand.setId(id); //修改資料 brandService.update(brand); return new Result(true,StatusCode.OK,"修改成功"); }
測試:http://localhost:18081/brand/325415
4.3.5 刪除品牌
(1)業務層
修改com.changgou.goods.service.BrandService,新增刪除品牌方法,程式碼如下:
1 2 3 4 5
/*** * 刪除品牌 * @param id */ void delete(Integer id);
修改com.changgou.goods.service.impl.BrandServiceImpl,新增刪除品牌方法,程式碼如下:
1 2 3 4 5 6 7 8
/** * 刪除 * @param id */ @Override public void delete(Integer id){ brandMapper.deleteByPrimaryKey(id); }
(2)控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10
/*** * 根據ID刪除品牌資料 * @param id * @return */ @DeleteMapping(value = "/{id}" ) public Result delete(@PathVariable Integer id){ brandService.delete(id); return new Result(true,StatusCode.OK,"刪除成功"); }
測試:http://localhost:18081/brand/325415
4.3.6 品牌列表條件查詢
(1)業務層
修改com.changgou.goods.service.BrandService,增加根據條件搜尋品牌方法,程式碼如下:
1 2 3 4 5 6
/*** * 多條件搜尋品牌方法 * @param brand * @return */ List<Brand> findList(Brand brand);
修改com.changgou.goods.service.impl.BrandServiceImpl,新增根據多條件搜尋品牌方法的實現,程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
/** * 條件查詢 * @param brand * @return */ @Override public List<Brand> findList(Brand brand){ //構建查詢條件 Example example = createExample(brand); //根據構建的條件查詢資料 return brandMapper.selectByExample(example); } /** * 構建查詢物件 * @param brand * @return */ public Example createExample(Brand brand){ Example example=new Example(Brand.class); Example.Criteria criteria = example.createCriteria(); if(brand!=null){ // 品牌名稱 if(!StringUtils.isEmpty(brand.getName())){ criteria.andLike("name","%"+brand.getName()+"%"); } // 品牌圖片地址 if(!StringUtils.isEmpty(brand.getImage())){ criteria.andLike("image","%"+brand.getImage()+"%"); } // 品牌的首字母 if(!StringUtils.isEmpty(brand.getLetter())){ criteria.andLike("letter","%"+brand.getLetter()+"%"); } // 品牌id if(!StringUtils.isEmpty(brand.getLetter())){ criteria.andEqualTo("id",brand.getId()); } // 排序 if(!StringUtils.isEmpty(brand.getSeq())){ criteria.andEqualTo("seq",brand.getSeq()); } } return example; }
(2) 控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10
/*** * 多條件搜尋品牌資料 * @param brand * @return */ @PostMapping(value = "/search" ) public Result<List<Brand>> findList(@RequestBody(required = false) Brand brand){ List<Brand> list = brandService.findList(brand); return new Result<List<Brand>>(true,StatusCode.OK,"查詢成功",list); }
測試:http://localhost:18081/brand/search
4.3.7 品牌列表分頁查詢
(1)業務層
修改com.changgou.goods.service.BrandService新增分頁方法,程式碼如下:
1 2 3 4 5 6 7
/*** * 分頁查詢 * @param page * @param size * @return */ PageInfo<Brand> findPage(int page, int size);
修改com.changgou.goods.service.impl.BrandServiceImpl新增分頁方法實現,程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
/** * 分頁查詢 * @param page * @param size * @return */ @Override public PageInfo<Brand> findPage(int page, int size){ //靜態分頁 PageHelper.startPage(page,size); //分頁查詢 return new PageInfo<Brand>(brandMapper.selectAll()); }
(2)控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10 11 12
/*** * 分頁搜尋實現 * @param page:當前頁 * @param size:每頁顯示多少條 * @return */ @GetMapping(value = "/search/{page}/{size}" ) public Result<PageInfo> findPage(@PathVariable int page, @PathVariable int size){ //分頁查詢 PageInfo<Brand> pageInfo = brandService.findPage(page, size); return new Result<PageInfo>(true,StatusCode.OK,"查詢成功",pageInfo); }
測試:http://localhost:18081/brand/search/1/3
4.3.8 品牌列表條件+分頁查詢
(1)業務層
修改com.changgou.goods.service.BrandService,增加多條件分頁查詢方法,程式碼如下:
1 2 3 4 5 6 7 8
/*** * 多條件分頁查詢 * @param brand * @param page * @param size * @return */ PageInfo<Brand> findPage(Brand brand, int page, int size);
修改com.changgou.goods.service.impl.BrandServiceImpl,新增多條件分頁查詢方法程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/** * 條件+分頁查詢 * @param brand 查詢條件 * @param page 頁碼 * @param size 頁大小 * @return 分頁結果 */ @Override public PageInfo<Brand> findPage(Brand brand, int page, int size){ //分頁 PageHelper.startPage(page,size); //搜尋條件構建 Example example = createExample(brand); //執行搜尋 return new PageInfo<Brand>(brandMapper.selectByExample(example)); }
(2)控制層
BrandController新增方法
1 2 3 4 5 6 7 8 9 10 11 12 13
/*** * 分頁搜尋實現 * @param brand * @param page * @param size * @return */ @PostMapping(value = "/search/{page}/{size}" ) public Result<PageInfo> findPage(@RequestBody(required = false) Brand brand, @PathVariable int page, @PathVariable int size){ //執行搜尋 PageInfo<Brand> pageInfo = brandService.findPage(brand, page, size); return new Result(true,StatusCode.OK,"查詢成功",pageInfo); }
測試:http://localhost:18081/brand/search/1/3
4.3.9 公共異常處理
為了使我們的程式碼更容易維護,我們建立一個類集中處理異常,該異常類可以建立在changgou-common工程中,建立com.changgou.framework.exception.BaseExceptionHandler,程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@ControllerAdvice public class BaseExceptionHandler { /*** * 異常處理 * @param e * @return */ @ExceptionHandler(value = Exception.class) @ResponseBody public Result error(Exception e) { e.printStackTrace(); return new Result(false, StatusCode.ERROR, e.getMessage()); } }
注意:@ControllerAdvice註解,全域性捕獲異常類,只要作用在@RequestMapping上,所有的異常都會被捕獲。