Spring 5 (含 Spring MVC) 新手村起手式 — 資料庫連線篇

Christy
appxtech
Published in
6 min readJan 24, 2022

每個系統都有機會要將資料進行儲存,方便後續的搜尋或是統計 等其它運用。目前最常用的儲存方式莫過於檔案或是資料庫(Database)。

今天我們一樣以會員註冊的畫面來示範,如何將表單上的資料可以有效又快速的儲存至資料庫。

市場上常見的資料庫有 MS SQL Server, Oracle DB, mySQL, PostrgreSQL 等等,而這次我們會使用的是H2資料庫,原因是檔案體積小,執行快而且 還非常容易整合在Spring專案裏,不用另外再安裝。

實作步驟一二三

  1. 在現有專案裏導入H2 Database server
  2. 測試資料庫連線設定 (* 使用 H2-Console)
  3. 撰寫程式將資料存入資料庫 (*Repository)

第一步 : 在現有專案裏導入H2 Database Server

打開現行專案資料夾的POM檔,我們要確定有包含 H2,以及
Spring-Data-JPA-Starter的函式庫/程式。
(*如果是使用 IDEA J 的朋友們,可以在POM檔裏面 按下 COMMAND + N)

輸入關鍵字spring data 即可看到 spring-boot-starter-data-jpa

確定加入之後,在POM檔 就該會出現以下的設定

第二步 : 測試資料庫連線設定 (*使用 H2-Console)

接著就是要做資料庫來源的設定,方便程式的連結。
打開 專案資料夾/resources/application.properties

然後輸入以下的設定內容

接著打開瀏覽器,開啟 http://localhost/myh2/ (*注意 第一行有改成 port 80)

並且確認 中間連線字串 JDBC URL及帳密的設定如下圖後,按下 Connect

成功的話,就會出現如下的畫面,就完成了。 (*沒出現的話,請檢查上述步驟)

第三步 : 撰寫程式將資料存入資料庫 (*Repository Pattern)

如果需要將表單傳送給Controller的資料儲存到DB的話,我們需要準備下列幾項

I. Database Model Class(*對應資料庫欄位)

II. 資料庫連線相關的Java程式 — Repository Class

讓我們一一來說明,

所謂的Model Class,可以先想成Controller用來儲存表單的類別,而這類別的結構也就會是Spring-Data-Jpa會自動幫我們建立資料表的結構喔。以之前的會員註冊表單為例,(*在這邊,我們有重新命名 類別名稱 為 MyUser)

除了之前寫的驗證規則的標籤之外,我們還加了三個,分別是 @Entity, @Id, @ GeneratedValue 。

存檔執行後,重新載入H2 Console 小工具會發現左邊多了一項 My_USER資料表,展開後裏面還包含了各個欄位 如ID, Email 等。代表 @Entity標示的類別,spring-data-jpa會在資料庫建立對應的Table。

接著,要如何在程式裏可以新增一筆資料到DB呢?!
以老派(old-school)的寫法,通常都會要用JDBC寫法,
搭配 connection, Statement, ResultSet的方式 ~~~~ oh no!!!!!

在Spring Data的年代 ~~~ 上面的關鍵字通通都不用到

只要新建一個簡單的類別,裏面還不用寫任何的程式

最後回到Controller ~ 搭配著Autowired關鍵字,讓MyUserRepository可以被自動產生(注入)到成員變數裏。

那最後就只剩下關鍵的那一行 userRepository.save(user);

Wowla ~~~~ 一切就是那麼地簡單 !!! 那麼地方便 !!!

透過DB連線小工具,確認一下資料的確有存入,喔耶!!!!

總結

在這次的範例裏,我們有使用以下 javax.persistence 分類裏的 annotation

@Entity
@Id
@GeneratedValue

搭配著Spring Core所提供的核心標籤 @Autowired,可以讓Spring底層自動幫我們來產生MyUserRepository物件,並且依照原本宣告的類別注入。就不用再靠建構子或是setter/getter的方式來取得 MyUserRepository。

而且也可以跟老派的Connection, Statement, ResultSet 等物件 說 byebye

以上的例子希望能讓大家對Spring裏 Dependency Injection (DI)的運作及Spring Data的運用,能有多一步的了解 ~

練習

一、依上面文章內容,試著產生一個新的類別代表 Product,
欄位有 產品名稱,詳細說明,價格,種類 等四個欄位。

可以讓Controller的程式新增一個產品記錄到Database裏的新Table。

--

--