難度:簡單
類型:step-by-step
適用:初學者,徹底沒有接觸過 Spring-Boot
開發環境:jdk 1.8
關鍵詞:java, sring-boot, spring-mvc, restful
筆者環境:macOShtml
打開 http://start.spring.io/ 網站,選擇Gradle
,依賴項選擇Web(網站)
、DevTools(開發工具)
、JPA(ORM)
、MySQL(數據庫)
、Thymeleaf(模板)
。
以下圖所示:
java
打開~demo/src/main/resource/application.properties
文件,添加必要配置,以下:mysql
#服務端口 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
打開類文件 demo/src/main/java/com/example/demo/DemoApplication.java
web
組件掃描,若是不添加,可能沒法正確的@Autowiredspring
聲明配置,告訴 Spring,該類是bean 的配置類sql
以下圖:數據庫
結構以下圖 :json
插入一些測試數據:api
其中新建 Entity 實體 TestUserInfo
,完整以下圖:
spring-mvc
其中@Entity
聲明這是一個數據實體,由於表名和類名不一致,因此用@Table
告訴 Jpa,這個表名的具體名字。
@Id
聲明瞭主鍵,@GeneratedValue
聲明瞭主鍵是自增的,
@Column
聲明瞭字段名的真實名字,Jpa 大小寫是表明下劃線分割,因此只能傳所有小寫的字段名。
新建接口 TestUserInfoRepository
,該接口繼承自,,須要JpaRepository<T,ID>
,T
就是數據實體類,ID
是類 id 字段的類型,以下圖:
@Repository
聲明,告訴Spring-Boot,這是一個倉儲的組件。
由於 JpaData,採用的是規範契約的方式來聲明查詢,因此只要按照規範來建立接口中的方法,框架會自動生成對應的 sql 語句。若是有特殊需求,也能夠用聲明的方式寫 sql 語句,例如:
上下兩條語句的效果同樣,區別就是第一條按照規格來寫,框架會自動提示字段的名字,定義了方法,框架會自動解析 sql,第二條框架會讀取@Query
中的 sql 使用。
新建服務類TestInfoService,以下圖
```@Service`` 聲明瞭這是一個服務類。
以下圖,
由於 TestUserInfoRepository 聲明瞭@Repository
,因此可以使用@Autowired
進行關聯,這裏要說明一點,SpringMvc 中的@Controller
,@Service
,@Repository
本質都是@Component
,Spring-Boot 本質上可以使用@Autowired
進行關聯的必須是有@Component
聲明,或者其子繼承聲明的才行。
以下圖,
一個簡單的服務查詢類和方法。
TestUserInfoResponseModel用於接口返回相應 json 使用,以下圖
ApiController 類,以下圖,
@RestController
聲明這是一個Restful 的控制器,@RequestMapping
聲明瞭 url-route,是/api
開頭的。
以下圖,
同 Repository
同樣,TestUserInfoService
聲明瞭@Service
,因此他能夠被@Autowired
,前面講過緣由了。
以下圖,
@RequestMapping
,聲明瞭 action 的 url-route,那麼這個action 的完整路徑就是/api/get_user
另外,由於是 Restful 的 controller ,因此,若是不聲明@ResponseBody
的話,就必須返回一個對象實體,框架會自動序列化成一個 json。
以下圖,
聲明瞭@ResponseBody
,接口機會以純文本的形式返回。
4.1.1 點擊運行,看到控制輸出以下圖,
看到端口的展現,表明運行成功了。
地址爲:http://localhost:8012/api/get_user?name=test1
地址爲:http://localhost:8012/api/get_plain?name=test1
而且關聯service
,以下圖,
@Controller
聲明這是一個 web 的控制器,/home
是 url-route
以下圖,
@RequestMapping中 value 能夠多一個,空白,表明能夠省略,/home/index,或者/home都是請求這個 action。
方法返回的 String
,是 ViewName
,好比新建一個 index.html
的模板,這裏使用就是返回字符串index
。
參數中的 Model
是在模板中使用的 Model
實體,示例中把查詢出來的實體,裝入了 model
的字典中,這樣在前臺模板就能使用。
若是不太喜歡返回字符串,可使用另一種,以下圖,
返回 ModelAndView
,這樣本身實例化的 ModelAndView
,傳入模板的名字,還有前臺須要使用的 model
,就能避免返回字符串,我我的推薦使用第一種方式,會比較靈活。
在/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
的字段。
請求地址:http://localhost:8012/home/index?name=test1
以下圖,
請求另外一個 aciton:
http://localhost:8012/home/test