1. 概述

这篇文章将带你快速掌握如何在 Spring Boot 项目中集成 Hibernate。

我们会从零开始构建一个简单的 Spring Boot 应用,并演示集成 Hibernate 是多么简单直接。如果你已经熟悉 Spring 和 ORM,那这篇就是帮你快速上手实战的“踩坑笔记”。

2. 初始化项目

我们使用 Spring Initializr 来快速搭建项目。为了集成 Hibernate,我们只需要选择以下依赖项:

  • Web(Spring MVC)
  • JPA(Java Persistence API)
  • H2(内存数据库,适合测试)

这些依赖项会自动帮我们引入 Hibernate 和相关工具。

项目生成后结构如下:

src
- main
  - java.com.baeldung.springboothibernate.application
    - ExampleApplication.java
  - resources
    - logback.xml
    - application.properties
- test
  - java.com.baeldung.springboothibernate.application.tests
    - ExampleApplicationUnitTest.java

3. Maven 依赖详解

打开 pom.xml,你会看到两个默认依赖:

  • spring-boot-starter-web
  • spring-boot-starter-test

而我们真正需要用于集成 Hibernate 的是这个:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

✅ 这个依赖包含了 JPA API、Hibernate 实现、JDBC 以及相关工具库。
✅ 默认 JPA 实现就是 Hibernate,所以加这个就够了。

我们还引入了 H2 数据库,用于测试:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

为了方便调试,我们启用 H2 控制台:

spring.h2.console.enabled=true

启动应用后,你可以在日志中看到类似输出:

HHH000412: Hibernate Core {#Version}
HHH000206: hibernate.properties not found
HCANN000001: Hibernate Commons Annotations {#Version}
HHH000400: Using dialect: org.hibernate.dialect.H2Dialect

然后访问 H2 控制台:http://localhost:8080/h2-console/

4. 创建实体类

为了验证 H2 是否正常工作,我们先创建一个实体类:

@Entity
public class Book {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    // standard constructors

    // standard getters and setters
}

✅ Hibernate 会自动根据这个实体类创建 Book 表。

我们再添加一些初始数据。在 resources 目录下创建 data.sqlimport.sql 文件:

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');

重启应用后,你可以在 H2 控制台中看到数据已经插入。

5. 创建 Repository 和 Service

继续完善应用结构,创建 Repository 接口:

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}

JpaRepository 提供了常见的 CRUD 操作,无需手动实现。

然后是 Service 层:

@Service
public class BookService {

    @Autowired
    private BookRepository bookRepository;

    public List<Book> list() {
        return bookRepository.findAll();
    }
}

最后我们写一个测试类验证数据是否正确加载:

@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 已成功集成。

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

✅ 然后重启应用,你就能在数据库中看到表名变成大写 BOOK 了。

7. 总结

本文带你快速上手了 Spring Boot + Hibernate 的集成过程,并使用 H2 作为测试数据库。我们从实体类、Repository、Service 到测试,完整演示了整个流程。

📌 小技巧:通过配置 PhysicalNamingStrategyStandardImpl 可以控制表名大小写。

所有代码示例均可在 GitHub 查看:
https://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-persistence


原始标题:Spring Boot with Hibernate | Baeldung