查看原文
其他

Spring Boot with Hibernate

dejunyu SpringForAll社区 2020-10-17

1.概述

在本文中,我们将了解如何将Spring Boot与Hibernate一起使用。

我们将构建一个简单的Spring Boot应用程序,看看将它与Hibernate集成是多么容易。

2.启动应用程序

我们将使用Spring Initializr来启动Spring Boot应用程序。 对于此示例,我们将仅使用必要的配置和依赖项来集成Hibernate,添加Web,JPA和H2依赖项。 我们将在下一节中解释这些依赖关系。

让我们生成项目并在IDE中打开它。 我们可以检查生成的项目结构并确定我们需要的配置文件。

这就是项目结构的样子:

3. Maven依赖

如果我们打开pom.xml,我们会看到我们将spring-boot-starter-web和spring-boot-starter-test作为maven依赖项。正如他们的名字所暗示的那样,这些是Spring Boot中的依赖项。

让我们快速了解一下JPA中的依赖:

  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-data-jpa</artifactId>

  4. </dependency>

此依赖项包括JPA API,JPA实现,JDBC和其他所需的库。由于默认的JPA实现是Hibernate,因此这种依赖性实际上足以将其引入。

最后,我们将使用H2作为此示例的一个非常轻量级的数据库:

  1. <dependency>

  2. <groupId>com.h2database</groupId>

  3. <artifactId>h2</artifactId>

  4. <scope>runtime</scope>

  5. </dependency>

我们可以使用H2控制台检查数据库是否已启动并运行,也可以使用用户友好的GUI进行数据输入。让我们继续并在application.properites中启用它:

  1. spring.h2.console.enabled=true

这就是所有我们的例子需要包含Hibernate和H2的配置。启动Spring Boot应用程序时,我们可以检查日志配置是否成功:

  1. HHH000412: Hibernate Core {#Version}

  2. HHH000206: hibernate.properties not found

  3. HCANN000001: Hibernate Commons Annotations {#Version}

  4. HHH000400: Using dialect: org.hibernate.dialect.H2Dialect

我们能够在本地进入H2的控制台: http://localhost:8080/h2-console/

4.创建实体

为了检查我们的H2是否正常工作,我们首先要在新模型文件中创建一个JPA实体:

  1. @Entity

  2. public class Book {


  3. @Id

  4. @GeneratedValue

  5. private Long id;

  6. private String name;


  7. // standard constructors


  8. // standard getters and setters

  9. }

我们现在有一个基本实体,H2可以从中创建一个表。 重新启动应用程序并检查H2控制台,将创建一个名为Book的新表。

要向我们的应用程序添加一些初始数据,我们需要创建一个新的SQL文件,其中包含一些insert语句并将其放在我们的资源文件夹中。 我们可以使用import.sql(Hibernate支持)或data.sql(Spring JDBC支持)文件来加载数据

以下是我们的示例数据:

  1. insert into book values(1, 'The Tartar Steppe');

  2. insert into book values(2, 'Poem Strip');

  3. insert into book values(3, 'Restless Nights: Selected Stories of Dino Buzzati');

同样,我们可以重新启动Spring Boot应用程序并检查H2控制台 - 数据现在位于Book表中。

5.创建存储库和服务

我们将继续创建基本组件以测试我们的应用程序。 首先,让我们在新的存储库文件夹中添加JPA Repository:

  1. @Repository

  2. public interface BookRepository extends JpaRepository<Book, Long> {

  3. }

我们可以使用Spring框架中的JpaRepository接口,它提供了基本CRUD操作的默认实现。

接下来,让我们在新的服务文件夹中添加BookService:

  1. @Service

  2. public class BookService {


  3. @Autowired

  4. private BookRepository bookRepository;


  5. public List<Book> list() {

  6. return bookRepository.findAll();

  7. }

  8. }

要测试我们的应用程序,我们需要检查创建的数据是否可以从服务的list()方法中获取。

我们将编写以下SpringBootTest:

  1. @RunWith(SpringRunner.class)

  2. @SpringBootTest

  3. public class BookServiceTest {


  4. @Autowired

  5. private BookService bookService;


  6. @Test

  7. public void whenApplicationStarts_thenHibernateCreatesInitialRecords() {

  8. List<Book> books = bookService.list();


  9. Assert.assertEquals(books.size(), 3);

  10. }

  11. }

通过运行此测试,我们可以检查Hibernate是否创建了Book数据,数据是否能由我们的服务成功获取。 Hibernate就是这样在Spring Boot中运行的。

6.大写表名

有时我们可能需要在数据库中使用大写字母编写表名。 正如我们已经知道的那样,默认情况下Hibernate会以小写字母生成表的名称

我们也可以尝试显式设置表名,如下所示:

  1. @Entity(name="BOOK")

  2. public class Book {

  3. // members, standard getters and setters

  4. }

但是,那不能运行。 想运行的话要在application.properties中设置此属性:

  1. spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

因此,我们可以在数据库中检查是否使用大写字母成功创建了表。

7.结论

在本文中,我们知道了将Hibernate与Spring Boot集成是多么容易。 我们使用H2数据库作为一个非常轻量级的内存解决方案。

我们给出了一个应用程序的完整示例,它使用了所有这些技术,最后,我们还提供了一个关于如何在数据库中以大写形式设置表名的小提示。

与往常一样,本文中提到的所有代码片段都可以在我们的GitHub存储库中找到。

原文链接:https://www.baeldung.com/spring-boot-hibernate

作者:baeldung

译者:dejunyu


推荐: Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

上一篇:Redis在微服务架构中的应用




 关注公众号

点击原文阅读更多



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存