目錄
-
-
- 一、業務分析
- 二、判斷是否已被收藏
- 三、添加收藏業務
- 最後
-
今天是劉小愛自學Java的第112天。
感謝你的觀看,謝謝你。
話不多說,開始今天的學習:

收藏,一個很常見很重要的功能。
- 看到一篇文章,可以選擇收藏。
- 看到一個商品,也可以選擇收藏。
- 包括本次案例中的旅遊路線也是一樣的。
這也是一個被頻繁使用的功能。
我寫了一百多篇的文章,有一個重大發現就是:文章被收藏數,遠遠大于點贊和評論。
正所謂收藏從未停止,學習從未開始。
這是我某平台的背景截圖:
我們今天要學的就是這個收藏功能的實作,當然我們項目不是文章,而是旅遊線路的收藏。
收藏有什麼特點呢?
- 使用者收藏之後,在他的收藏夾可以快速通路。
- 同一旅遊路線,可以有多個使用者收藏。
- 同一個使用者,可以收藏多條旅遊路線
它們之間的關系是多對多,是以在設計資料表時,會設計一個中間表來關聯它們。
這是我在可視化工具中才注意到的視圖功能,這樣一看的話,表與表之間的關系就很清楚了。
在中間表中,有另外兩張表的主鍵,分别為uid和rid。
- uid可以确定是哪個使用者。
- rid可以确定是哪條路線。
其中主要牽扯到兩個功能:
1判斷該路線是否能夠被使用者收藏
想要收藏旅遊路線,肯定需要使用者登入的。
- 如果使用者沒有登入,則無法收藏。
- 如果使用者已經收藏了,也沒法收藏。
2可以收藏的話完成收藏功能
收藏了之後,要将對應路線的count值加一。
同時還要将對應路線的count值查詢出來,以便使用者檢視總收藏數。
1前端發送請求
向背景發送請求判斷是否能收藏,請求中的參數為rid。
2Web層
建立FavoriteServlet接受請求,在isFavorite方法中編寫代碼:
①接受請求
擷取前端發送的請求資料rid。
②Service層
這裡做了一個判斷,判斷使用者是否登入:
- 如果使用者沒有登入,那麼不可收藏。
- 如果使用者已經登入了,那麼再去資料庫查詢是否已經收藏了。
③響應資料
将資料轉換成json資料,再響應資料。
3Service層
①調用dao層查詢資料
我們要判斷使用者是否已經收藏了該路線,需要根據rid和uid這兩個參數去查詢tab_favorite表。
查詢資料一般是一條資料,但穩妥起見這裡傳回值還是用一個集合接受。
畢竟就算隻有一條資料也可以放入集合中。
②查詢結果判斷
如果能查詢到資料,則表示已經收藏了,是以傳回false,反之則為true。
4dao層
使用jdbcTemplate的query方法查詢資料,結果為一個集合,将其傳回即可。
5前端渲染
前端接受伺服器響應的資料之後,根據傳回值判斷是否将相應的按鈕隐藏:
如果傳回的值為true,表示已經被收藏了,是以不可收藏了,将點選收藏這個按鈕隐藏。
如果傳回值為false,則相反。
上述都是使用的id選擇器來定位标簽。
添加收藏的功能實作和上述的是差不多的,但邏輯稍許複雜。
在“點選收藏”處将點選事件和該函數綁定。
使用者點選收藏,就會向伺服器發送請求,其中請求參數為rid。
2web層
接受前端請求,并在addFavorite()方法中編寫代碼:
①使用者未登入
則不可添加收藏,将資料封裝到map中。
②使用者已登入:添加收藏資料
調用favoriteService來操作。
③使用者已登入:更新收藏記錄數
調用routeService來操作。
添加收藏隻是針對tab_favorite這張表,除此之外我們還得查詢添加收藏後的總收藏數。
是以需要根據rid查詢tab_route這張表中的資料,得到route對象。
再調用route的屬性count即可得到總收藏數,其對應Service層Dao層代碼如下:
注意:這裡是Route中的代碼編寫。
既然是根據id查詢,肯定是一個route對象,故使用queryForObject()方法。
這裡是Favorite的service層。
①添加收藏資料
通過favoriteDao層對favorite這張表進行增加收藏資料的操作。
②更新收藏記錄數
将tab_route表中對應資料的count增加一,又是調用了routeDao的方法。
調用jdbcTemplate的update方法完成對對應資料的字段count增一。
③傳回資料
這兩者必須同時成功,否則就算失敗,也就是傳回值都不為0才行。
向tab_favorite表中添加收藏資料,共三個字段:
- rid:對應收藏的是哪條路線。
- uid:對應哪個使用者收藏了該路線。
- date:使用者收藏時的時間。
①收藏成功
将已經收藏次數更新後顯示。
②收藏失敗