Spring Boot 初探 - 介面和資料庫操作
之前一直使用 Python ,學習 Java 基本語法後也一直沒能實踐,正好部門的測試平臺是使用的 Spring Boot 框架開發,藉此機會學習一下,未來也能體會一下與 Python 的差異。
帶著目標
首先明確我們在本次體驗 Spring Boot 中想要實現的功能:
- 一個 Web 介面
- 資料寫入資料庫中
之所以是這兩者,是因為我們在 Web 開發中最遇到的操作就是它們。
而能夠實現寫入資料庫後,其他查、改、刪的操作都是類似的。
基礎環境
工具 | 版本 |
---|---|
IDEA | 2019.2 |
JDK | 11 |
MySQL | 5.7 |
此處只是個人環境,非推薦環境,環境不一致沒太大問題
Spring Boot 外掛安裝
專業版自帶外掛,無需安裝。
社群版需要在 IDEA 外掛中心中搜索 "Spring Assistant" 安裝。
專案配置
新建專案
- 選擇專案型別 "Spring Initializr"
- 選擇對應 SDK,"Initializr Service URL" 選擇預設即可,下一步
- 輸入專案名稱等資訊(我保持預設,因此專案為
com.example.demo
),我選擇 Maven 作為構建工具 - 選擇需要加入的依賴,推薦使用:
- Developer Tools:
- Spring Boot DevTools (修改程式碼後能自動重啟服務)
- Lombok (Java優秀的註解庫,可以減少Setter/Getter等程式碼的編寫)
- Web:
- Spring Web Starter (包含Spring專案所需要的元件與容器)
- SQL:
- Spring Data JPA (遵循JPA規範,使用Hibernate持久化資料的庫)
- MySQL Driver (資料庫驅動)
- Developer Tools:
以上即建立成功一個新專案。
pom.xml
因為使用的 Spring Initializr
建立專案,pom.xml
中的依賴座標都已經配置好,無需修改。
新增資料庫配置
修改 src/main/resouces/application.properties
檔案,新增下面內容:
# 資料庫配置
# 資料庫連線地址,jpa庫需要提前建立好
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false
# 資料庫賬號
spring.datasource.username=root
# 資料庫密碼
spring.datasource.password=123456
# 資料庫驅動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# JPA 配置
# 自動處理物件關係對映,允許自動建表等操作
spring.jpa.hibernate.ddl-auto=update
# 是否在控制檯顯示資料庫語句
spring.jpa.show-sql=true
複製程式碼
關於 spring.jpa.hibernate.ddl-auto
的配置,有如下幾個選項:
- validate: 載入 Hibernate 時,驗證建立資料庫表結構
- create: 每次載入 Hibernate ,重新建立資料庫表結構
- create-drop: 載入 Hibernate 時建表,退出時刪除表結構
- update: 載入 Hibernate 自動更新資料庫表結構
程式碼實現
資料庫操作
實體類
實體類是對一個實體物件的程式碼描述。
在實體類中建立與資料庫表和欄位的關係對映(ORM),使得通過操作實體類就完成對資料庫的增刪改查操作。
以建立一個 "Book" 實體類為例,假設我們期望操作的表名為 "t_book":
// 標記此類為實體類
@Entity
// 設定操作的資料庫表
@Table(name="t_book")
public class Book{
// 設定主鍵
@Id
// 欄位值的生成策略,暫不展開說明,可以私下查一下
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
// 配置欄位屬性,可以不需要
@Column(length = 32)
private String name;
// 新增欄位的 getter/setter 方法
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
",name='" + name + '\'' +
'}';
}
}
複製程式碼
程式碼有些長,可以使用
Lombok
進行簡化。
*使用 Lombok 簡化程式碼
Lombok 是一個 Java 實用工具,可以通過註解來幫助開發人員消除冗長的 Java 程式碼,應用在我們的實體類上的效果如下:
@Entity
@Table(name="t_book")
@Data
public class Book{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
}
複製程式碼
可以看到,在使用 lombok
的 Data
註解後,我們的程式碼簡化了很多,不需要再編寫欄位的 Getter/Setter
和 toString
方法,並且不需要為欄位註明資料庫Column,只需要保留主鍵的 @Id
註解即可。
DAO 類
實體類 Book
只是建立了物件關係對映,還需要建立一個 DAO 類簡化持久化過程(save
/delete
等)。
import org.springframework.data.jpa.repository.JpaRepository;
public interface BookDao extends JpaRepository<Book,Integer> {
}
複製程式碼
方法在 JpaRepository
中已經實現,不需要額外編寫。
測試用例
建立一個測試用例,用來測試資料的寫入:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookTests {
@Autowired
public BookDao bookDao;
@Test
public void testBook() {
Book book = new Book();
book.setName("book1");
bookDao.save(book);
}
}
複製程式碼
測試用例通過,查詢資料庫的 t_book
表可以看到已經插入一條資料。
Web 介面
還是從最簡單的開始實現,先寫一個接收 GET
請求的介面,返回 "Hello,Spring Boog!" 響應內容:
@RestController
@RequestMapping("/")
public class HelloController {
@RequestMapping("/hello")
public String index(){
return "Hello,Spring Boot!";
}
}
複製程式碼
右鍵執行專案的 DemoApplication
,啟動後,訪問 0.0.0.0:8080/hello
看到瀏覽器輸出 "Hello,Spring Boot!" ,一個最簡單的介面就建立成功了。
總結
之前對 Java 的印象是繁瑣,宣告多、配置多。但是在體驗了 Spring Boot 後,特別是使用了一些初始化外掛進行建立專案後可以發現,其實最基礎的程式碼框架 Spring Boot 已經為我們生成好,不過是需要理解一些框架或者庫的用法,大體 Web 開發的思想還是一致。接下來在業務程式碼中繼續學習了!