1. 程式人生 > >從零開始完整搭建 Spring-Boot 專案開發框架的教程

從零開始完整搭建 Spring-Boot 專案開發框架的教程

前言

難度:簡單
型別:step-by-step
適用:初學者,完全沒有接觸過 Spring-Boot
開發環境:jdk 1.8
關鍵詞:java, sring-boot, spring-mvc, restful
筆者環境:macOS

1. 專案建立

1.1 使用腳手架生成專案

開啟 http://start.spring.io/ 網站,選擇Gradle ,依賴項選擇Web(網站)DevTools(開發工具)JPA(ORM)MySQL(資料庫)Thymeleaf(模板)
如下圖所示:

start.spring.io

2. 專案配置

2.1 配置 application.properties

開啟~demo/src/main/resource/application.properties檔案,新增必要配置,如下:

#服務埠
server.port=8012
#mysql 配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mysql 連結字串
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false #mysqly使用者名稱和密碼 spring.datasource.username=your_mysql_name spring.datasource.password=your_mysql_password #jap 配置,是否輸出 sql spring.jpa.show-sql=true #thymeleaf配置 #開發環境關閉快取 spring.thymeleaf.cache=false spring.thymeleaf.encoding=utf-8 #設定使用非嚴格的HTML5校驗 spring.thymeleaf.mode=LEGACYHTML5 #調整id生成策略 spring.jpa.hibernate.use-new-id-generator-mappings=false 

2.2 配置 Application 主入口

開啟類檔案 demo/src/main/java/com/example/demo/DemoApplication.java

2.2.1 添加註解@ComponentScan

元件掃描,如果不新增,可能無法正確的@Autowired

2.2.2 添加註解@Configuration

宣告配置,告訴 Spring,該類是bean 的配置類

2.2.3 完成後的樣子

如下圖:


DemoApplication

3. Resftful 介面的示例

3.1 新增資料表的 Entity 實體類

3.1.1假設有一個數據表test_user_info

結構如下圖 :


表結構

插入一些測試資料:


測試資料

3.1.2 新建包名 entities

其中新建 Entity 實體 TestUserInfo,完整如下圖:

TestUserInfo.java

其中@Entity 宣告這是一個數據實體,因為表名和類名不一致,所以用@Table 告訴 Jpa,這個表名的具體名字。

@Id 聲明瞭主鍵,@GeneratedValue聲明瞭主鍵是自增的,

@Column 聲明瞭欄位名的真實名字,Jpa 大小寫是代表下劃線分割,所以只能傳全部小寫的欄位名。

3.2 新建 Repository

3.2.1 新建包名 repositories

新建介面 TestUserInfoRepository,該介面繼承自,,需要JpaRepository<T,ID>T就是資料實體類,ID是類 id 欄位的型別,如下圖:

TestUserInfoRepository.java

@Repository 宣告,告訴Spring-Boot,這是一個倉儲的元件。

3.2.2 建立查詢

因為 JpaData,採用的是規範契約的方式來宣告查詢,所以只要按照規範來建立介面中的方法,框架會自動生成對應的 sql 語句。如果有特殊需求,也可以用宣告的方式寫 sql 語句,例如:


TestUserInfoRepository.java

上下兩條語句的效果一樣,區別就是第一條按照規格來寫,框架會自動提示欄位的名字,定義了方法,框架會自動解析 sql,第二條框架會讀取@Query中的 sql 使用。

3.3 建立 Service 服務

3.3.1 新建包名 services,

新建服務類TestInfoService,如下圖


TesrInfoService.java

```@Service`` 聲明瞭這是一個服務類。

3.3.2 關聯 Repository

如下圖,


自動關聯

因為 TestUserInfoRepository 聲明瞭@Repository,所以能夠使用@Autowired 進行關聯,這裡要說明一點,SpringMvc 中的@Controller,@Service,@Repository 本質都是@Component,Spring-Boot 本質上能夠使用@Autowired 進行關聯的必須是有@Component宣告,或者其子繼承宣告的才行。

3.3.3 建立查詢方法

如下圖,


查詢方法

一個簡單的服務查詢類和方法。

3.4 建立 Model 實體

3.4.1 建立報名 models

TestUserInfoResponseModel用於介面返回相應 json 使用,如下圖


TestUserInfoResponseModel.java

3.5 建立 Restful 的 Controller

3.5.1 建立包名 controllers

ApiController 類,如下圖,


ApiController.java

@RestController 宣告這是一個Restful 的控制器,@RequestMapping 聲明瞭 url-route,是/api開頭的。

3.5.2 關聯 service

如下圖,


關聯 service

Repository 一樣,TestUserInfoService 聲明瞭@Service,所以他可以被@Autowired,前面講過原因了。

3.5.3 建立 aciton方法

如下圖,


action方法

@RequestMapping,聲明瞭 action 的 url-route,那麼這個action 的完整路徑就是/api/get_user

另外,因為是 Restful 的 controller ,所以,如果不宣告@ResponseBody 的話,就必須返回一個物件實體,框架會自動序列化成一個 json。

3.5.4 建立返回 plain 字串的action

如下圖,


plain action

聲明瞭@ResponseBody,介面機會以純文字的形式返回。

4. 請求測試

4.1 執行專案

4.1.1 點選執行,看到控制輸出如下圖,


console logs

看到埠的展示,代表執行成功了。

4.1.2 請求get_user介面

地址為:http://localhost:8012/api/get_user?name=test1

get_user

4.1.3 請求 get_plain 介面

地址為:http://localhost:8012/api/get_plain?name=test1

get_plain

4.1.4 至此,Restful 的專案 Demo 建立完畢。

5. 建立動態Web專案

5.1 建立 HomeController

並且關聯service,如下圖,

HomeController

@Controller 宣告這是一個 web 的控制器,/home 是 url-route

5.2 建立 action

如下圖,


index

@RequestMapping中 value 可以多一個,空白,代表可以省略,/home/index,或者/home都是請求這個 action。

方法返回的 String,是 ViewName,比如新建一個 index.html 的模板,這裡使用就是返回字串index

引數中的 Model 是在模板中使用的 Model 實體,示例中把查詢出來的實體,裝入了 model的字典中,這樣在前臺模板就能使用。

5.3 另外一種 aciton

如果不太喜歡返回字串,可以使用另外一種,如下圖,


ModelAndView

返回 ModelAndView,這樣自己例項化的 ModelAndView,傳入模板的名字,還有前臺需要使用的 model,就能避免返回字串,我個人推薦使用第一種方式,會比較靈活。

5.4 建立模板頁面

/resource/templates 中建立index.html,如下圖,

index.html

因為我們使用的是thymeleaf模板,所以html 中聲明瞭 xmlns=th="http://www.thymeleaf.org",這樣在 html 種就能使用模板屬性去繫結資料,控制元素。

span中的 th:text=“${model?.id}”,告訴了模板,這個spantext 設定為model?.id的值。帶上?問號的意思是,model 可能為 null,這樣不會報錯,null 的時候,text 就是空。

model 就是我們在 action 傳給 model的名字,idnameage,就是 model 的欄位。

5.5 執行請求

請求地址:http://localhost:8012/home/index?name=test1
如下圖,

請求訪問 index

請求另一個 aciton:
http://localhost:8012/home/test

請求訪問test

5.6 至此動態 web的示例結束



作者:mcjiffy
連結:https://www.jianshu.com/p/512f84c439d8
來源:簡書