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.sql
或 import.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