前言
難度:簡單
類型: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 完成后的樣子
如下圖:
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 語句,例如:
上下兩條語句的效果一樣,區別就是第一條按照規格來寫,框架會自動提示字段的名字,定義了方法,框架會自動解析 sql,第二條框架會讀取@Query
中的 sql 使用。
3.3 創建 Service 服務
3.3.1 新建包名 services,
新建服務類TestInfoService,如下圖
```@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 使用,如下圖
3.5 創建 Restful 的 Controller
3.5.1 創建包名 controllers
ApiController 類,如下圖,
@RestController
聲明這是一個Restful 的控制器,@RequestMapping
聲明了 url-route,是/api
開頭的。
3.5.2 關聯 service
如下圖,
同 Repository
一樣,TestUserInfoService
聲明了@Service
,所以他可以被@Autowired
,前面講過原因了。
3.5.3 創建 aciton方法
如下圖,
@RequestMapping
,聲明了 action 的 url-route,那么這個action 的完整路徑就是/api/get_user
另外,因為是 Restful 的 controller ,所以,如果不聲明@ResponseBody
的話,就必須返回一個對象實體,框架會自動序列化成一個 json。
3.5.4 創建返回 plain 字符串的action
如下圖,
聲明了@ResponseBody
,接口機會以純文本的形式返回。
4. 請求測試
4.1 運行項目
4.1.1 點擊運行,看到控制輸出如下圖,
看到端口的展示,代表運行成功了。
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
如下圖,
@RequestMapping中 value 可以多一個,空白,代表可以省略,/home/index,或者/home都是請求這個 action。
方法返回的 String
,是 ViewName
,比如新建一個 index.html
的模板,這里使用就是返回字符串index
。
參數中的 Model
是在模板中使用的 Model
實體,示例中把查詢出來的實體,裝入了 model
的字典中,這樣在前臺模板就能使用。
5.3 另外一種 aciton
如果不太喜歡返回字符串,可以使用另外一種,如下圖,
返回 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的示例結束
想看有料有趣的 Github 精品項目,歡迎關注我的公眾號:cool_github
或者搜索:GitHub精品推薦