1. 程式人生 > 程式設計 >Spring Boot 初探 - 介面和資料庫操作

Spring Boot 初探 - 介面和資料庫操作

之前一直使用 Python ,學習 Java 基本語法後也一直沒能實踐,正好部門的測試平臺是使用的 Spring Boot 框架開發,藉此機會學習一下,未來也能體會一下與 Python 的差異。

帶著目標

首先明確我們在本次體驗 Spring Boot 中想要實現的功能:

  • 一個 Web 介面
  • 資料寫入資料庫中

之所以是這兩者,是因為我們在 Web 開發中最遇到的操作就是它們。

而能夠實現寫入資料庫後,其他查、改、刪的操作都是類似的。

基礎環境

工具 版本
IDEA 2019.2
JDK 11
MySQL 5.7

此處只是個人環境,非推薦環境,環境不一致沒太大問題

Spring Boot 外掛安裝

專業版自帶外掛,無需安裝。

社群版需要在 IDEA 外掛中心中搜索 "Spring Assistant" 安裝。

專案配置

新建專案

  1. 選擇專案型別 "Spring Initializr"
  2. 選擇對應 SDK,"Initializr Service URL" 選擇預設即可,下一步
  3. 輸入專案名稱等資訊(我保持預設,因此專案為 com.example.demo),我選擇 Maven 作為構建工具
  4. 選擇需要加入的依賴,推薦使用:
    • Developer Tools:
      • Spring Boot DevTools (修改程式碼後能自動重啟服務)
      • Lombok (Java優秀的註解庫,可以減少Setter/Getter等程式碼的編寫)
    • Web:
      • Spring Web Starter (包含Spring專案所需要的元件與容器)
    • SQL:
      • Spring Data JPA (遵循JPA規範,使用Hibernate持久化資料的庫)
      • MySQL Driver (資料庫驅動)

以上即建立成功一個新專案。

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;
}
複製程式碼

可以看到,在使用 lombokData 註解後,我們的程式碼簡化了很多,不需要再編寫欄位的 Getter/SettertoString 方法,並且不需要為欄位註明資料庫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 開發的思想還是一致。接下來在業務程式碼中繼續學習了!