iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
自我挑戰組

Spring Boot 三十天挑戰賽系列 第 13

Day 13 - Hibernate - Java Persistence

  • 分享至 

  • xImage
  •  

ORM 用起來可以很簡單,實際上也可以玩得很複雜( = 陡峭的學習曲線)
Yes

前一天提到 Spring Data JPA,今天就來聊一下 Hibernate 這個常被使用的持久化框架。

什麼是 Hibernate?

Hibernate 是一個開源的 Java 持久化框架,它的目標是幫助開發者更容易地從關聯式資料庫中存取資料。在過去,開發者經常需要手寫 SQL 語句來對資料庫進行操作,這不僅工作量大,而且容易出錯。Hibernate 提供了一種方法,讓我們可以使用物件導向的方式來管理資料庫的資料,這使得資料的存取變得更簡單、更有邏輯性。

Hibernate 與 JPA 的關聯

有些人可能會疑惑,上一篇已經介紹了 JPA,那和 Hibernate 又有什麼不同?

JPA 是 Java Persistence API 的縮寫,它是一套 Java 平台上的規範,提供了一個明確的持久化標準。而 Hibernate 是基於這個規範下實作的框架,換句話說 Hibernate 遵循了 JPA 的規範,並提供了具體的功能。

Hibernate 的核心特性與優勢

  • ORM (Object-Relational Mapping):把資料庫中的 table mapping 成 Java 物件,而這些物件間的關聯也可以直接 mapping 到資料庫的關聯上。
  • Cache:Hibernate 內建了快取機制,可以大幅提高資料庫操作的效能。
  • Lazy Loading:延遲載入不需要的資料,降低系統的負擔。
  • Dialect Support:Hibernate 支援多種資料庫,只需要簡單的設定就能輕鬆切換。

在 Spring Boot 中使用 Hibernate

  1. 加入 Maven 依賴
<!-- 省略其他 dependency -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  1. 配置 application.properties

    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=dbmeowmeow
    spring.datasource.password=pwmeowmeow
    spring.jpa.hibernate.ddl-auto=update
    
    // 假如使用 MySQL 資料庫
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
    
    // 假如使用 Oracle 資料庫
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.OracleDialect
    
    • hibernate.dialect 是一個配置屬性,指的是 Hibernate 如何與特定的資料庫系統互動的語言和行為。在 RDBMS 世界中,雖然 SQL 是一種標準語言,但各個資料庫系統(如 MySQL、Oracle、SQL Server 等)都有自己的方言,因此使用 Hibernate 這樣的 ORM 工具時,需要針對特定資料庫的生成最佳 SQL syntax。
      1. 最佳效能:根據資料庫特性,一些 SQL syntax 的結構或功能可能有所不同。為了獲得最佳效能,生成的 SQL 應該符合資料庫的特性和 best practice。
      2. 功能支援:不同的資料庫有不同的功能。通過方言,Hibernate 可以知道資料庫支援哪些功能,從而利用這些功能。
      3. 避免語法錯誤:如果不使用正確的方言,生成的 SQL syntax 可能會導致語法錯誤或執行錯誤。
  2. 建立實體(Entity)

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
        private String email;
        // 省略 getters, setters 還有其他方法
    }
    
  3. 建立 Repository

    public interface UserRepository extends JpaRepository<User, Long> {}
    

以上這樣我們就可以透過 UserRepository 來進行資料庫操作了,非複雜查詢時可以不用再撰寫任何 SQL 語句。

善用這個靈活的工具能幫助我們高效、穩定地進行開發!


上一篇
Day 12 - Spring Data JPA - 從基礎到實作
下一篇
Day 14 - Hibernate API
系列文
Spring Boot 三十天挑戰賽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言