1. 概述
在本教程中,我們將學習如何使用 Spring Boot 與 Hibernate。
我們將構建一個簡單的 Spring Boot 應用程序,並演示如何輕鬆地將其與 Hibernate 集成。
2. 啓動應用程序
我們將使用 Spring Initializr 來啓動我們的 Spring Boot 應用程序。對於這個示例,我們將僅添加所需的配置和依賴項,以集成 Hibernate,並添加 Web、JPA 和 H2 依賴項。我們將在下一部分中解釋這些依賴項。
現在,讓我們生成項目並在我們的 IDE 中打開它。我們可以檢查生成的項目結構並識別我們需要配置的文件。
以下是項目結構的樣子:
src
- main
- java.com.baeldung.springboothibernate.application
- ExampleApplication.java
- resources
- logback.xml
- application.properties
- test
- java.com.baeldung.springboothibernate.application.tests
- ExampleApplicationUnitTest.java3. Maven 依賴項
如果打開 pom.xml,我們會看到 spring-boot-starter-web 和 spring-boot-starter-test 是 Maven 依賴項。正如它們的名稱所示,這些是 Spring Boot 中的啓動依賴項。
讓我們快速看一下引入 JPA 的依賴項:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>此依賴項包括 JPA API、JPA 實現、JDBC 以及其他必要的庫。由於默認的 JPA 實現是 Hibernate,因此此依賴項本身就足以包含它。
最後,我們將使用 H2 作為這個示例中的一個非常輕量級的數據庫:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>我們可以在 H2 控制枱中檢查數據庫是否正常運行,並提供用户友好的 GUI 用於數據錄入。 我們將啓用它在 application.properties 中:
spring.h2.console.enabled=true這就是配置成功包含 Hibernate 和 H2 在我們示例中的所有內容。我們可以通過啓動 Spring Boot 應用程序時檢查日誌,以確認配置是否成功。
HHH000412: Hibernate Core {#Version}
HHH000206: hibernate.properties not found
HCANN000001: Hibernate Commons Annotations {#Version}
HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
現在,我們可以通過訪問 http://localhost:8080/h2-console/ 訪問 H2 控制枱。
4. 創建實體
為了驗證我們的 H2 是否正常工作,我們首先將在一個新的 models 文件夾中創建一個 JPA 實體:
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String name;
// standard constructors
// standard getters and setters
}我們現在有一個基本實體,H2 可以從中創建表。重啓應用程序並檢查 H2 控制枱,將會創建一個名為 Book 的新表。
為了向我們的應用程序添加一些初始數據,我們需要創建一個包含插入語句的新的 SQL 文件,並將其放在我們的 resources 文件夾中。 我們可以使用 import.sql (Hibernate 支持) 或 data.sql (Spring JDBC 支持) 文件來加載數據。
以下是我們的示例數據:
insert into book values(1, 'The Tartar Steppe');
insert into book values(2, 'Poem Strip');
insert into book values(3, 'Restless Nights: Selected Stories of Dino Buzzati');再次,我們可以重啓 Spring Boot 應用程序並檢查 H2 控制枱;數據現在位於 Book 表中。
5. 創建倉庫和服務
我們將繼續創建基本組件,以便測試我們的應用程序。首先,我們將向一個新的 repositories 文件夾中添加 JPA Repository:
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}我們可以使用 Spring 框架中的 JpaRepository 接口,它提供對基本 CRUD 操作的默認實現。
接下來,我們將添加一個新的 services 文件夾中的 BookService。
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public List<Book> list() {
return bookRepository.findAll();
}
}為了測試我們的應用程序,我們需要檢查從服務中創建的數據是否可以通過 list()方法獲取。
我們將編寫以下 SpringBootTest:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookServiceUnitTest {
@Autowired
private BookService bookService;
@Test
public void whenApplicationStarts_thenHibernateCreatesInitialRecords() {
List<Book> books = bookService.list();
Assert.assertEquals(books.size(), 3);
}
}通過運行此測試,我們可以檢查 Hibernate 是否創建了 Book 數據,然後我們的服務是否能夠成功地檢索這些數據。 並且就這麼簡單,Hibernate 已經與 Spring Boot 運行起來了。
6. 設置表名大寫
有時,我們需要在數據庫中將表名使用大寫字母。正如我們已經知道的,Hibernate 默認情況下會生成小寫字母的表名。
我們可以嘗試顯式設置表名:
@Entity(name="BOOK")
public class Book {
// members, standard getters and setters
}然而,那樣不行。我們需要在 application.properties 中設置這個屬性:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl然後我們可以檢查數據庫,確認表已成功創建,且使用了大寫字母。
7. 結論
在本文中,我們發現將 Hibernate 與 Spring Boot 集成有多麼容易。我們使用 H2 數據庫作為一種輕量級的內存解決方案。
我們提供了一個使用所有這些技術的完整示例,並提供了一個關於如何在數據庫中設置表名(全部為大寫)的提示。