Hibernate 4 入门教程

原文: https://javabeginnerstutorial.com/hibernate/hibernate-4-introduction/

Hibernate 4 简介

在本文中,我将向您展示如何使用 Hibernate 4 和一个简单的示例应用来尝试您所了解的内容。

什么是 Hibernate,我为什么要关心?

创建 Hibernate 是为了利用 Java 应用和关系数据库之间的连接,因为很难在数据库表和 Java 对象之间来回映射。

而且由于 Hibernate 这样做,它减少了 JDBC 查询执行和数据映射所消耗的开发时间。

获取 Hibernate

要获取最新版本的 Hibernate,只需访问此站点。 对于本文,我将使用4.3.10.Final版本。

如果下载并解压缩了包,则可以在lib文件夹中看到一些子文件夹。 使用 Hibernate 的任何项目都需要required下的所有内容。 其他文件夹包含特殊情况的库。 例如,在jpa下,您可以找到提供 JPA 实体管理器支持的库。

另外,您可以设置一个 Maven 项目并将 Hibernate 添加为依赖项。 在这种情况下,您无需担心 Hibernate 的其他必需依赖关系,这些依赖关系在捆绑下载的必需包中附带。 使用 Maven 更简单明了,因此我将使用 Maven 作为依赖项管理。

一个简单的示例

在简单的示例中,我将创建一个 Java 应用,该应用将有关书籍的信息存储在数据库中。 为了简单起见,该数据库将是 H2 内存数据库。

依赖关系是使用 Maven 管理的,输出是具有所有依赖关系的可执行 JAR。

实体

我将存储在数据库中的实体如下:

  1. package example;
  2. public class Book {
  3. private String isbn;
  4. private String title;
  5. private String author;
  6. Book() {
  7. }
  8. public Book(String isbn, String title, String author) {
  9. this.isbn = isbn;
  10. this.title = title;
  11. this.author = author;
  12. }
  13. public String getIsbn() {
  14. return this.isbn;
  15. }
  16. public String getTitle() {
  17. return this.title;
  18. }
  19. public void setTitle(String title) {
  20. this.title = title;
  21. }
  22. public String getAuthor() {
  23. return this.author;
  24. }
  25. public void setAuthor(String author) {
  26. this.author = author;
  27. }
  28. public void setIsbn(String isbn) {
  29. this.isbn = isbn;
  30. }
  31. }

无参数构造器是所有持久类的必需条件,因为 Hibernate 每次反射都会创建对象实例。 在这种情况下,此构造器是私有的,以防止创建没有信息的书籍。

依赖项

为了使应用运行,我们在项目中需要两个依赖项:Hibernate 和 H2。 为此,将以下内容添加到pom.xml中:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.hibernate</groupId>
  4. <artifactId>hibernate-core</artifactId>
  5. <version>4.3.10.Final</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.h2database</groupId>
  9. <artifactId>h2</artifactId>
  10. <version>1.4.187</version>
  11. </dependency>
  12. </dependencies>

现在我们准备继续。

配置 Hibernate

Hibernate 需要一些配置才能开始。 您需要将其包含在hibernate.cfg.xml文件中。 它是普通的旧 XML。 它包含数据库连接属性和实体映射文件的包含位置。

  1. <!DOCTYPE hibernate-configuration PUBLIC
  2. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  3. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  4. <hibernate-configuration>
  5. <session-factory>
  6. <!-- Database connection settings -->
  7. <property name="connection.driver_class">org.h2.Driver</property>
  8. <property name="connection.url">jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE</property>
  9. <property name="connection.username">sa</property>
  10. <property name="connection.password"/>
  11. <!-- JDBC connection pool (use the built-in) -->
  12. <property name="connection.pool_size">1</property>
  13. <!-- SQL dialect -->
  14. <property name="dialect">org.hibernate.dialect.H2Dialect</property>
  15. <!-- Disable the second-level cache -->
  16. <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
  17. <!-- Echo all executed SQL to stdout -->
  18. <property name="show_sql">true</property>
  19. <!-- Drop and re-create the database schema on startup -->
  20. <property name="hbm2ddl.auto">create</property>
  21. <mapping resource="hibernate_example/hbm/Book.hbm.xml"/>
  22. </session-factory>
  23. </hibernate-configuration>

实体映射

为了将正确的字段映射到数据库中的正确列,Hibernate 需要实体的映射文件。 这些文件位于以实体名称开头的.hbm.xml文件中。 在此示例中,Book.hbm.xml

  1. <!DOCTYPE hibernate-mapping PUBLIC
  2. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  4. <hibernate-mapping package="hibernate_example">
  5. <class name="Book" table="BOOKS">
  6. <id name="isbn" type="string"/>
  7. <property name="title"/>
  8. <property name="author"/>
  9. </class>
  10. </hibernate-mapping>

main方法

要在 Hibernate 中使用该应用,我们仍然需要一个入口点—在 Java 中,这是main方法。 首先,我们需要进行一些配置,例如使用会话工厂创建会话。因此,让我们看一下代码的运行方式:

  1. public class Main {
  2. public static void main(String[] args) {
  3. final Configuration configuration = new Configuration().configure();
  4. final StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
  5. final SessionFactory factory = configuration.buildSessionFactory(builder.build());
  6. final Session session = factory.openSession();
  7. final Book book = new Book("93939398948 ", "Java 8", "Author");
  8. session.beginTransaction();
  9. session.save(book);
  10. session.getTransaction().commit();
  11. final List<Book> books = session.createCriteria(Book.class).list();
  12. System.out.println("\n----\n");
  13. System.out.println(MessageFormat.format("Storing {0} books in the database", books.size()));
  14. for (final Book b : books) {
  15. System.out.println(b);
  16. }
  17. System.out.println("\n----\n");
  18. session.close();
  19. factory.close();
  20. }
  21. }

运行该应用后,控制台应具有一些日志消息,并且将一本书添加到数据库中:

  1. Storing 1 books in the database
  2. Java 8 by JBT (ISBN:9393939894

—–

总结

Hibernate 提供了一个很好的功能,可以利用 Java 对象和关系数据库之间的映射。 当然,该示例应用并没有显示 Hibernate 的全部功能:为了获得更好的用户体验,您可以添加一个用户界面来在应用中创建和列出书籍。

在下一篇文章中,我将展示如何摆脱 XML 配置(某些开发人员称为“XML 地狱”)并改为使用注解。 因此,请继续关注。

您可以在此处找到并下载应用的源码