週末,孟哥給大家整理一個基於springboot+vue的在線音樂網站。
項目不管是功能還是界面都非常的nice,源碼免費開源給大家。
公衆號,回覆:boot音樂
1,系統的安裝
a.下載數據庫中記錄的資源
後臺回覆:歌曲圖片
下載網站依賴的歌曲及圖片,將 data 夾裏的文件直接放到 music-server 文件夾下。
b.修改
1)數據庫:將sql文件夾中的 tp_music.sql 文件導入數據庫。
2)music-server:啓動後端服務之前,有一些地方需要修改,先去 /music-website/music-server/src/main/resources 這個目錄下的文件裏修改自己的 spring.datasource.username 和 spring.datasource.password,並且修改下圈出來的的文件中 MyPicConfig 類下的 addResourceLocations方法中的路徑,否則資源加載不了。(Mac 和 win 下路徑有些差異,我的是 Mac 上的路徑,win 上需要在 file: 後標明是哪個盤,例如:"file:C:\\user\\XXX\\"
c.啓動項目
music-server 是本項目的後端,用於監聽前端發來的請求,提供接口。music-client 和 music-manage 都是本項目的前端部分,前者是前臺,後者是後臺。運行時後端必須啓動,兩個前端項目可以都啓動,也可以只啓動其中一個,他們是獨立的。
然後進入 music-server 文件夾,運行下面命令啓動服務器
// 方法一 ./mvnw spring-boot:run // 方法二 mvn spring-boot:run // 前提裝了 maven
進入 music-client 文件夾,運行下面命令啓動前臺項目
npm install // 安裝依賴 npm run dev // 啓動前臺項目
進入 music-manage 文件夾,運行下面命令啓動後臺管理項目
npm install // 安裝依賴 npm run dev // 啓動後臺管理項目
2,系統的截圖如下所示:
下面是對系統的簡介:
這裏對音樂網站這個項目的開發流程做一下描述,我覺得了解了具體實現的來龍去脈,上手自己做就容易得多了,要知道數據是怎麼從數據庫一步步跑到前端頁面的,當知道了整個的流程再去處理中間的細節,具體實現的細節等有時間了就補充,接下來我們就開始吧。
操作系統:Mac
JDK:jdk-8u141
mysql:mysql-5.7.21-1-macos10.13-x86_64
node:v12.4.0
IDE:IntelliJ IDEA 2018
打開 idea,新建一個項目,在 new 一個新項目的時候,選擇 Spring Initializr,在選擇項目依賴的時候勾選 web下的 Spring Web Starter 和 SQL下的 MySQL Driver 和 MyBatis Framework ,然後一直繼續後會得到如下結構(總體分三層)。
1)application.properties
配置 application.properties 文件,用於連接數據庫(代碼見項目源碼)。
2)generatorConfig.xml
利用MyBatis Generator 自動生成代碼(實體類,Mapper接口和Mapper.xml文件),需要指定 mysql-connector-java ( src/main/resources
目錄下)和生成文件的路徑。在 src/main/resources
目錄下創建 generatorConfig.xml 文件並配置(代碼見項目源碼)。
3)pom.xml
pom.xml 文件負責配置項目相關的依賴和插件,包括上面的 MyBatis Generator(項目plugins 標籤中注視掉的代碼是對 Mybatis-generator 插件的配置),在創建項目時,idea 已經幫我們引入了一些依賴,下面我們需要在 dependencies 標籤中引入項目需要的一些依賴,配置的代碼可以直接看代碼,這裏就不往出寫了,下面對主要依賴進行下描述:
package | 說明 |
---|---|
mybatis-spring-boot-starter | MyBatis核心for Spring Boot |
mysql-connector-java | java與mysql連接的jar包驅動程序 |
在 plugins 標籤中對 Mybatis-generator 進行配置,用於自動生成代碼。
至此,項目的配置就弄完了,在命令行執行 ./mvnw mybatis-generator:generate
自動生成代碼,得到的項目結構如下所示。此時會看到多生成了 dao、domain、mapper 目錄及下面的文件。生成項目後,需要將上面 pom.xml 文件中 Mybatis-generator 插件的配置注視,因爲這個文件就是初始時候自動生成代碼用的,如果不注視每次運行都會再生成一次,即覆蓋之前的代碼。
創建好項目之後先測試一下,首先在 src/main/java/com/example/demo
目錄下創建 service 包,service 包下創建 ConsumerService 接口和 impl包,impl包下創建 ConsumerServiceImpl 類,具體創建這個幹嘛下面寫接口時候再介紹。
(1)ConsumerService 接口的代碼如下
ConsumerServiceImpl 類的代碼如下
(2)在 src/main/java/com/example/demo
下的 ConsumerMapper 接口中添加如下代碼。
在 src/main/resources/mapper
下的 ConsumerMapper.xml 文件中將 insertSelective 改成 addUser
(3)打開 SpringBoot 的啓動類,加上 @MapperScan 註解,指向 dao 層接口所在的包路徑。@MapperScan(「com.example.demo.dao」)
(4)然後在 src/test/java/com/example/demo
下的測試文件中寫測試代碼,如下,然後點如下所示運行,沒有提示錯誤,且數據庫中成功存入數據,說明項目構建成功,接下來就可以開始寫接口了。
在寫接口之前,先對項目層次做一下介紹。項目層次我將主要根據 domain、 DAO、Service、Controller 這幾層主要實現的功能和它們之間的聯繫進行介紹。
1)實體類(domain 目錄下)
定義數據庫表所對應的實體類。
2)Mapper 層 / DAO 層(dao、mapper 目錄下)
數據操作層:向數據庫發送 SQL 語句,完成數據庫操作。
分爲 Mapper 接口 和 Mapper 接口映射文件。Mapper 接口在 dao 目錄下,定義操作數據庫的函數(函數不能直接去進行 CURD), Mapper 接口映射文件在 mapper 目錄下,完成對數據庫的訪問。
3)Service 層(service 目錄下)
服務層:完成業務邏輯處理。調用 Mapper 層操作數據庫。
分爲 Service 接口 + Service 實現,用面向接口的編程思想,方便後續功能的解耦及擴展。
4)Controller 層(controller 目錄下)
控制層:對請求和響應進行控制,調用 Service 層進行業務邏輯處理,最後將處理好的數據返回給前端。
5)實戰(寫一個返回所有用戶信息的接口)
假如前端訪問 http://localhost:8888/allUser 就要拿到所有用戶的信息,那麼按照上面的層次我們可以這麼寫。
(1)訪問的接口由 Controller 層來處理,所以這裏這樣定義,要返回所有用戶信息,把它當一個命令,交給 Service 層去做。
(2)到了 Service 層,Service 層的 ConsumerService 接口中先定義下面方法
然後在 ConsumerServiceImpl 類中這樣去實現它。
(3)Service 層會讓 dao 層的 ConsumerMapper 接口調 allUser 方法去返回數據,
而 ConsumerMapper 接口操作數據庫又要依賴 Mapper.xml 文件。
(4)這樣,一個返回所有用戶信息的接口就寫完了,打開 Terminal 輸入如下命令跑一下項目。如下所示
./mvnw spring-boot:run |
在瀏覽器中輸入 http://localhost:8888/allUser 查看結果。
知道一個接口怎麼寫,其他接口也類似,需要注意的地方有兩點,第一個是解決跨域問題(可以查看代碼 config 文件夾下面設置),第二個問題是關於靜態資源的處理(這個就是最開始跑這個項目時候修改圖片、音樂路徑做的事情)。
6)最後再總結一下
當前端要訪問數據的時候後端就提供相應接口,接口的編寫是通過 Controller 層監聽請求, 數據的處理交給 Service 層,而 Service 層再通過 Mapper 層操作數據庫,操作完成後數據再一層層往上走,最後返回給前端。
. ├── avatorImages // 用戶頭像 ├── img │ ├── singerPic // 歌手圖片 │ ├── songListPic // 歌單圖片 │ └── songPic // 歌曲圖片 ├── song // 存放歌曲 ├── src │ ├── main │ │ ├── java │ │ │ └── com.example.demo │ │ │ ├── config // 配置(跨域) │ │ │ ├── controller // 控制層,接收請求返回響應 │ │ │ ├── dao // 數據操作層 │ │ │ ├── domain // 實體類 │ │ │ ├── service │ │ │ │ └── impl // Service 層的接口 │ │ │ └── HwMusicApplicationTests.java // 項目入口 │ │ └── resources │ │ ├── mapper // mapper.xml文件,操作數據庫 │ │ ├── static // 存放靜態資源 │ │ ├── templates │ │ ├── application.properties // 連接數據庫 │ │ └── generatorConfig.xml // MyBatis Generator 自動生成代碼 │ └── test │ └── java │ └── com.example.demo // 測試用的 ├── pom.xml // 添加相關依賴和插件 └── target |
這裏項目的創建比後端要簡單的多,直接用官方提供的腳手架,運行如下命令先全局安裝 vue,然後進行安裝
npm install -g @vue/cli # 要創建項目的地方 vue init webpack music-client |
進入項目,執行如下命令安裝項目依賴,
npm install |
然後直接如下命令項目就跑起來了。
npm run dev |
但是假如你是新手,不建議上來就用腳手架,先看一下 官網 瞭解一下組件、路由等等。
創建一個vue項目後,在 views 文件夾中寫一個頁面的組件,因爲代碼都放在一起對後期維護和修改都不方便,所以把他們根據功能或者位置拆分開,放到 components 文件夾下面去實現,最後再整合到 views 文件夾下。加載到 App.vue 文件中,最後渲染到頁面中。
最開始構建頁面可以寫死,當基本樣子搭起來之後就可以去向後端去請求數據,請求數據用到的是axios
插件,獲取到數據後console一下,在控制檯查看請求的數據,確保數據保存到正確的變量中去(這裏如果遇到跨域的問題可以在後端用 CORS 解決)。
組件的問題解決了接下來就是訪問的問題,我們如何通過點擊的時候切換組件呢?我們在 router 文件夾中引入組件,給它們設定訪問它們的路徑。這裏用到了vue-router
插件。
隨着組件的增多,組件之間的傳值就是問題,不可能一些數據一直好幾個組件裏一直傳,我們需要把它們單獨拿出來放到 store 文件夾下面保存起來,當需要的時候在獲取(這裏通過 sessionStorage 解決vuex刷新數據丟失問題)。這裏用到了vuex
組件。
不同的組件有時候會用到相同的方法,當要修改方法時就要改好多地方,所以把它們單獨拿出來放到mixins文件夾下面,當用到這些方法的時候在對應組件中引入即可。
vue支持很多的第三方組件,能給我們項目帶來很好的交互和顯示效果,具體在需要的時候npm或yarn就行了,當然了,一些樣式和js語句也可以放到assets文件夾下。
. ├── build // webpack相關配置文件 ├── config // vue基本配置文件 ├── node_modules // 包 ├── index.html // 入口頁面 ├── package.json // 管理包的依賴 ├── src // 項目源碼目錄 │ ├── assets // 靜態資源,圖片、js、css 等 │ ├── api // 封裝請求的 api │ ├── mixins // 公共方法 │ ├── router // 路由 │ ├── store // 管理數據 │ ├── components │ │ ├── AlbumContent.vue // 展示歌單歌手包含的歌曲 │ │ ├── Comment.vue // 評論 │ │ ├── ContentList.vue // 展示歌單歌手區 │ │ ├── LoginLogo.vue // 登錄界面的logo │ │ ├── PlayBar.vue // 頁面底部的播放控制區 │ │ ├── ScrollTop.vue // 回到頂部 │ │ ├── SongAudio.vue // 接收音樂並播放的位置 │ │ ├── Swiper.vue // 輪播圖 │ │ ├── TheFooter.vue // 頁腳 │ │ ├── TheHeader.vue // 頁頭 │ │ ├── TheAside.vue // 播放列表 │ │ ├── Upload.vue // 修改頭像 │ │ ├── Info.vue // 個人信息區 │ │ └── search // 搜索區 │ │ ├── SearchSongLists.vue // 按歌單搜索 │ │ └── SearchSongs.vue // 按歌手搜索 │ ├── pages // 組件 │ │ ├── 404.vue // 404 │ │ ├── Home.vue // 首頁 │ │ ├── Setting.vue // 設置 │ │ ├── Login.vue // 登錄區 │ │ ├── LoginUp.vue // 註冊區 │ │ ├── Lyric.vue // 歌詞顯示區 │ │ ├── MyMusic.vue // 我的收藏區 │ │ ├── Search.vue // 搜索區 │ │ ├── Singer.vue // 歌手區 │ │ ├── SingerAlbum.vue // 歌手詳情 │ │ ├── SongList.vue // 歌單區 │ │ └── SongListAlbum.vue // 歌單詳情 │ ├── main.js // 入口js文件 │ └── App.vue // 根組件 ├── static // 存放靜態資源 ├── test // 測試文件目錄 ├── .babelrc // bable 編譯配置 └── .gitignore // 提交忽略的文件配置 |
這裏相比前臺的開發要簡單得多,因爲基本使用 Element UI 快速搭建的,實現和前臺一樣。
. ├── build ├── config ├── node_modules ├── index.html ├── package.json ├── src │ ├── App.vue │ ├── main.js │ ├── api │ ├── assets │ ├── mixins │ ├── components │ │ ├── Header.vue │ │ ├── Home.vue │ │ ├── Sidebar.vue │ │ └── SongAudio.vue │ ├── pages │ │ ├── CollectPage.vue │ │ ├── CommentPage.vue │ │ ├── ConsumerPage.vue │ │ ├── InfoPage.vue │ │ ├── ListSongPage.vue │ │ ├── Login.vue │ │ ├── SingerPage.vue │ │ ├── SongListPage.vue │ │ └── SongPage.vue │ ├── router │ └── store ├── static └── test |
公衆號,回覆:boot音樂
你的點贊,評論是對我最大支持,感謝。