天天看點

Java項目實戰第13天:收藏從未停止,學習從未開始

目錄

    • 一、業務分析
    • 二、判斷是否已被收藏
    • 三、添加收藏業務
    • 最後

今天是劉小愛自學Java的第112天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

Java項目實戰第13天:收藏從未停止,學習從未開始

收藏,一個很常見很重要的功能。

  • 看到一篇文章,可以選擇收藏。
  • 看到一個商品,也可以選擇收藏。
  • 包括本次案例中的旅遊路線也是一樣的。

這也是一個被頻繁使用的功能。

我寫了一百多篇的文章,有一個重大發現就是:文章被收藏數,遠遠大于點贊和評論。

正所謂收藏從未停止,學習從未開始。

這是我某平台的背景截圖:

Java項目實戰第13天:收藏從未停止,學習從未開始

我們今天要學的就是這個收藏功能的實作,當然我們項目不是文章,而是旅遊線路的收藏。

收藏有什麼特點呢?

  • 使用者收藏之後,在他的收藏夾可以快速通路。
  • 同一旅遊路線,可以有多個使用者收藏。
  • 同一個使用者,可以收藏多條旅遊路線

它們之間的關系是多對多,是以在設計資料表時,會設計一個中間表來關聯它們。

Java項目實戰第13天:收藏從未停止,學習從未開始

這是我在可視化工具中才注意到的視圖功能,這樣一看的話,表與表之間的關系就很清楚了。

在中間表中,有另外兩張表的主鍵,分别為uid和rid。

  • uid可以确定是哪個使用者。
  • rid可以确定是哪條路線。

其中主要牽扯到兩個功能:

1判斷該路線是否能夠被使用者收藏

想要收藏旅遊路線,肯定需要使用者登入的。

  • 如果使用者沒有登入,則無法收藏。
  • 如果使用者已經收藏了,也沒法收藏。

2可以收藏的話完成收藏功能

收藏了之後,要将對應路線的count值加一。

同時還要将對應路線的count值查詢出來,以便使用者檢視總收藏數。

1前端發送請求

Java項目實戰第13天:收藏從未停止,學習從未開始

向背景發送請求判斷是否能收藏,請求中的參數為rid。

2Web層

建立FavoriteServlet接受請求,在isFavorite方法中編寫代碼:

Java項目實戰第13天:收藏從未停止,學習從未開始

①接受請求

擷取前端發送的請求資料rid。

②Service層

這裡做了一個判斷,判斷使用者是否登入:

  • 如果使用者沒有登入,那麼不可收藏。
  • 如果使用者已經登入了,那麼再去資料庫查詢是否已經收藏了。

③響應資料

将資料轉換成json資料,再響應資料。

3Service層

Java項目實戰第13天:收藏從未停止,學習從未開始

①調用dao層查詢資料

我們要判斷使用者是否已經收藏了該路線,需要根據rid和uid這兩個參數去查詢tab_favorite表。

查詢資料一般是一條資料,但穩妥起見這裡傳回值還是用一個集合接受。

畢竟就算隻有一條資料也可以放入集合中。

②查詢結果判斷

如果能查詢到資料,則表示已經收藏了,是以傳回false,反之則為true。

4dao層

Java項目實戰第13天:收藏從未停止,學習從未開始

使用jdbcTemplate的query方法查詢資料,結果為一個集合,将其傳回即可。

5前端渲染

前端接受伺服器響應的資料之後,根據傳回值判斷是否将相應的按鈕隐藏:

Java項目實戰第13天:收藏從未停止,學習從未開始

如果傳回的值為true,表示已經被收藏了,是以不可收藏了,将點選收藏這個按鈕隐藏。

如果傳回值為false,則相反。

上述都是使用的id選擇器來定位标簽。

添加收藏的功能實作和上述的是差不多的,但邏輯稍許複雜。

Java項目實戰第13天:收藏從未停止,學習從未開始

在“點選收藏”處将點選事件和該函數綁定。

使用者點選收藏,就會向伺服器發送請求,其中請求參數為rid。

2web層

接受前端請求,并在addFavorite()方法中編寫代碼:

Java項目實戰第13天:收藏從未停止,學習從未開始

①使用者未登入

則不可添加收藏,将資料封裝到map中。

②使用者已登入:添加收藏資料

調用favoriteService來操作。

③使用者已登入:更新收藏記錄數

調用routeService來操作。

添加收藏隻是針對tab_favorite這張表,除此之外我們還得查詢添加收藏後的總收藏數。

是以需要根據rid查詢tab_route這張表中的資料,得到route對象。

再調用route的屬性count即可得到總收藏數,其對應Service層Dao層代碼如下:

Java項目實戰第13天:收藏從未停止,學習從未開始

注意:這裡是Route中的代碼編寫。

既然是根據id查詢,肯定是一個route對象,故使用queryForObject()方法。

這裡是Favorite的service層。

Java項目實戰第13天:收藏從未停止,學習從未開始

①添加收藏資料

通過favoriteDao層對favorite這張表進行增加收藏資料的操作。

②更新收藏記錄數

将tab_route表中對應資料的count增加一,又是調用了routeDao的方法。

調用jdbcTemplate的update方法完成對對應資料的字段count增一。

③傳回資料

這兩者必須同時成功,否則就算失敗,也就是傳回值都不為0才行。

Java項目實戰第13天:收藏從未停止,學習從未開始

向tab_favorite表中添加收藏資料,共三個字段:

  • rid:對應收藏的是哪條路線。
  • uid:對應哪個使用者收藏了該路線。
  • date:使用者收藏時的時間。
Java項目實戰第13天:收藏從未停止,學習從未開始

①收藏成功

将已經收藏次數更新後顯示。

②收藏失敗