從零開始完整搭建 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(模板)
。
如下圖所示:
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
,完整如下圖:
其中@Entity
宣告這是一個數據實體,因為表名和類名不一致,所以用@Table
告訴 Jpa,這個表名的具體名字。
@Id
聲明瞭主鍵,@GeneratedValue
聲明瞭主鍵是自增的,
@Column
聲明瞭欄位名的真實名字,Jpa 大小寫是代表下劃線分割,所以只能傳全部小寫的欄位名。
3.2 新建 Repository
3.2.1 新建包名 repositories
新建介面 TestUserInfoRepository
,該介面繼承自,,需要JpaRepository<T,ID>
,T
就是資料實體類,ID
是類 id 欄位的型別,如下圖:
@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
4.1.3 請求 get_plain 介面
地址為:http://localhost:8012/api/get_plain?name=test1
4.1.4 至此,Restful 的專案 Demo 建立完畢。
5. 建立動態Web專案
5.1 建立 HomeController
並且關聯service
,如下圖,
@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
,如下圖,
因為我們使用的是thymeleaf
模板,所以html
中聲明瞭 xmlns=th="http://www.thymeleaf.org"
,這樣在 html 種就能使用模板屬性去繫結資料,控制元素。
span
中的 th:text=“${model?.id}
”,告訴了模板,這個span
的text
設定為model?.id
的值。帶上?
問號的意思是,model
可能為 null
,這樣不會報錯,null
的時候,text
就是空。
model
就是我們在 action
傳給 model
的名字,id
,name
,age
,就是 model
的欄位。
5.5 執行請求
請求地址:http://localhost:8012/home/index?name=test1
如下圖,
請求另一個 aciton:
http://localhost:8012/home/test
5.6 至此動態 web的示例結束
作者:mcjiffy
連結:https://www.jianshu.com/p/512f84c439d8
來源:簡書