今天是劉小愛自學Java的第143天。前端
感謝你的觀看,謝謝你。vue
![](http://static.javashuo.com/static/loading.gif)
學習計劃安排以下:web
-
商品分類業務的初步實現。 -
數據模型的分析:數據表字段的設計,Java中對應的實體類,前端頁面vue組件。 -
業務模型的分析:請求路徑是什麼?根據什麼去數據庫查詢?具體實現代碼的編寫。 -
其中還有一個跨域問題將來得及解決,怎麼感受積累的問題愈來愈多了,這樣下去可不行啊。
1、商品分類業務
咱們的項目是劉小愛商城,其核心天然是商品了,因此就要涉及到一個商品分類業務。數據庫
1需求分析跨域
咱們先看看國內的主流網站上是如何作的?瀏覽器
![](http://static.javashuo.com/static/loading.gif)
好比說家用電器,這是一級類目。服務器
它又分爲不少種:好比說電視、空調、洗衣機、冰箱……等,這是二級類目。微信
而且還可以垂直細分,好比說電視又能夠被分爲:超薄電視、全面屏電視……等。app
好,如何用代碼實現這種需求?框架
一個需求拿到手中了,優先創建數據模型。
-
前端頁面中的這些數據如何存放到數據庫中? -
數據庫中的表如何設計,有哪些字段? -
設計Java實體類和數據表對應?
這些問題解決了,方向也就定了,剩下的就是具體代碼的編寫了。
因此說數據模型是很是重要的,你想呀,方向都弄錯了,寫再多的代碼有什麼用?
2數據庫表關係梳理
![](http://static.javashuo.com/static/loading.gif)
商品分類這是一個多級類目的關係。
家用電器是一個父節點,它有多個子節點,子節點往下又有子節點,因此表字段設計:
-
id和name表字段這不用多說。 -
經過表字段parent_id指定對應父節點的id? -
經過表字段is_parent肯定它是不是父節點? -
若是是true表示它是父節點,有子節點。 -
若是是false表示它不是父節點,沒有子節點。
這樣就能把表數據自關聯起來了,不管多少級關係,都能表示清楚了。
值得注意的是:
-
數據表字段單詞之間用下劃線「_」隔開。
-
is_parent是一個布爾值,可是在數據表中用0和1表示,0爲false,1爲true。
3前端vue代碼的編寫
好數據分析完成,先從前端頁面開始編寫,由於請求是從前端頁面發出的。
固然實際開發中應該都是根據開發文檔來各自完成,我這邊的話都得本身來弄。
![](http://static.javashuo.com/static/loading.gif)
Category.vue是分類業務對應的具體vue,v-card:卡片,是vuetify框架中提供的組件。
至於具體的前端代碼編寫,咱們不作詳細介紹,可是有一點咱們要搞清楚:
頁面發送的請求路徑是怎樣的?
後臺服務器得根據這個路徑來接受請求。
咱們能夠發現:請求路徑爲baseUrl+url,也就是上述中兩個url相鏈接。
同時再經過瀏覽器F12打開控制檯確認其請求路徑是不是這樣的?
2、後臺代碼編寫
1Java實體類
注意實體類是存放在微服務lxa-item的lxa-item-pojo子工程中:
![](http://static.javashuo.com/static/loading.gif)
數據庫中的表tb_category,關於字段和咱們一開始的分析基本一致,多了一個sort屬性。
而Category實體類使用通用mapper將其和表tb_category一一對應起來。
2啓動類及mapper層
該業務邏輯很簡單,只涉及到了單表查詢,因此使用通用mapper便可。
注意具體的業務代碼是存放在微服務lxa-item的lxa-item-service子工程中:
![](http://static.javashuo.com/static/loading.gif)
①mapper層代碼編寫
由於是單表查詢,因此直接使用通用mappe便可,繼承通用mapper中的Mapper接口便可,泛型爲對應的實體類Category。
②啓動類編寫
由於使用了通用mapper,因此要經過註解@MapperScan肯定掃描mapper的路徑。
另外兩個註解一個開啓eureka客戶端,一個說明是SpringBoot啓動類,寫過不少遍了。
注意:通用mapper相關的包爲tk開頭,必定要注意導包不要導錯了。
3Controller層和Service層
![](http://static.javashuo.com/static/loading.gif)
①Controller層代碼
確認其請求路徑:category/list?pid=0
先不考慮網關,直接把整個業務寫出來。
請求路徑中參數是以問號的形式拼接到路徑中的,因此用註解@RequestParam接受參數。
若是是category/list/1這樣直接出如今請求路徑中,就用註解@Pathvarible接受參數。
②Servic層代碼
由於pid並非tb_category表中的主鍵,因此建立一個對象設定pid再查詢。
注意,作一個提醒:
關於通用mapper的使用我專門寫過一篇教程,就不作贅述了。
其中還應該作結果判斷的處理,若是查詢到的數據爲空要報錯,我這邊暫時沒作處理。
3、網關測試
代碼編寫完畢作一個測試:
![](http://static.javashuo.com/static/loading.gif)
①直接訪問
直接在瀏覽器上輸入對應的路徑,參數pid設置爲0,能夠從數據庫中查詢到對應數據。
其查詢的數據結果上圖右側有顯示。
②經過網關訪問
回顧:網關的做用至關於加了一層保護,其本質仍是會跳轉直接訪問時的那個路徑。
-
prefix:添加路由前綴,網關訪問時路徑都要加上設置的這個路由前綴。 -
routes:添加路由,item/及其子路徑所有都會跳轉到item-service這個微服務。
再次強調:每新建一個微服務,咱們都要以相同的方式配置其網關路由。
③經過域名訪問
若是經過咱們昨天設定的網關域名訪問,會發現瀏覽器控制檯上報錯了,
具體什麼緣由呢?
涉及到了一個跨域問題,關於該問題,時間受限,咱們明天再作說明。
最後
我是劉小愛,一個白天上班晚上學習的95後滬漂,不爲其它,只爲學會自律作好本身,也願個人每日打卡能給你帶來勇氣,歡迎點贊關注和評論。
本文分享自微信公衆號 - 劉小愛(liuxiaoai946)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。