Hibernate 教程

Hibernate是一个开源Java持久性框架项目。它使用HQL和SQL执行功能强大的对象关系映射和查询数据库。Hibernate是Java中ORM映射的绝佳工具。它可以减少很多复杂性,从而减少应用程序中的缺陷,否则它们可能会找到存在的方法。对于那些对SQL知识了解有限的开发人员来说,这特别有利。

Hibernate最初是从ORM框架开始的,现已拆分为许多项目,例如Hibernate SearchHibernate ValidatorHibernate OGM(用于NoSQL数据库)等等。

Hibernate 架构

下图总结了 Hibernate 体系结构中的主要构建块。

 Hibernate 架构
Hibernate 架构

让我们了解每个块代表什么。

  1. 配置:通常以hibernate.propertieshibernate.cfg.xml文件形式写入。对于Java配置,您可能会发现带有注解的类@Configuration。Session Factory使用它与Java应用程序和数据库一起使用。它代表了应用程序Java类型到SQL数据库的完整映射集。
  2. 会话工厂:任何用户应用程序都向会话工厂请求会话对象。会话工厂使用上面列出的文件中的配置信息来适当地实例化会话对象。
  3. 会话:这表示在任何时间点应用程序和数据库之间的交互。这由org.hibernate.Session类表示。可以从SessionFactoryBean中检索会话的实例。
  4. 查询:它允许应用程序在数据库中查询一个或多个存储的对象。Hibernate提供了多种查询数据库的技术,包括NamedQueryCriteria API
  5. 一级缓存:它表示Hibernate Session对象与数据库交互时使用的默认缓存。它也称为会话缓存,它在当前会话中缓存对象。从Session对象到数据库的所有请求都必须通过一级缓存或会话缓存。必须注意,会话对象处于活动状态之前,会话对象可以使用第一级缓存。
  6. 事务:使您能够实现数据一致性,并在发生意外情况时回滚。
  7. 持久对象:这些对象是普通的旧Java对象(PO​​JO),它们被hibernate持久化为数据库相关表中的行之一,可以在配置文件(hibernate.cfg.xmlhibernate.properties)中进行配置,或使用注解进行@Entity注解。
  8. 二级缓存:用于跨会话存储对象。需要明确启用此功能,并且需要为第二级缓存提供缓存提供程序。常见的二级缓存提供程序之一是EhCache

Hibernate框架的主要功能

  • 对象/关系映射

    作为ORM框架,Hibernate允许Java域对象与数据库表的映射,反之亦然。结果,业务逻辑能够通过Java对象访问和操纵数据库实体。它通过处理事务管理,自动主键生成,管理数据库连接和相关实现等方面,有助于加快整个开发过程。

  • JPA提供者

    Hibernate确实支持Java Persistence API(JPA)规范。JPA是一组用于在Java对象和关系数据库实体之间访问,持久化和管理数据的规范。

  • 惯用的持久性

    遵循继承,多态等诸如面向对象原则的任何类都可以用作持久类。

  • 高性能和可扩展性

    Hibernate支持各种技术,例如不同的获取策略,延迟初始化,乐观锁定等,以实现高性能,并且可以在任何环境中很好地扩展。

  • 易于维护

    Hibernate不需要特殊的数据库表或字段,因此更易于维护。它在系统初始化时生成SQL。与JDBC相比,它维护起来更快,更容易。

在此页面中,我已对该博客中所有可用的 Hibernate 示例进行了分类。每次都会更新此页面,此博客中发布了一个新的 Hibernate 教程。敬请关注 !!

随意建议您想阅读的主题。

你好世界申请

Hibernate 3简介和编写Hello World应用程序

在这篇文章中,我将尝试详细介绍有关hibernate的更多信息,然后将确定在我们第一个运行的Java hibernate示例应用程序中使用hibernate的基本步骤。

基本概念

如何在Hibernate 4中构建SessionFactory

如果您一直在观看以前的 Hibernate 版本,那么您一定已经注意到它们已经连续快速弃用了许多类。不推荐使用的类是AnnotationConfigurationServiceRegistryBuilder依此类推。

在这个 Hibernate 教程中,我给出了一个构建 Hibernate 的示例,SessionFactory而不使用上面提到的不推荐使用的类。我正在使用最新的 Hibernate 版本,Hibernate 4.3.6.Final,因此您可以确保使用最新的方法来构建会话工厂。

实体平等与认同概念

在我们的应用程序中,很多时候我们都面临着这样的情况,我们必须比较两个对象以检查它们的相等性以满足某些业务规则。在核心Java中,我们已经掌握了检查对象是否相等的知识,但是在 Hibernate 状态下,我们还需要注意一些额外的事情。让我们学习一下那些额外的概念。

定义 Hibernate 实体之间的关联映射

当我们使用JPA注解对Java类进行注解并使其成为持久性实体时,我们可能会遇到两个实体可以关联并且必须相互引用的情况,无论是单向还是双向。在实际在 Hibernate 实体之间创建引用之前,让我们了解一些基本知识。

实体/持久性生命周期状态概念

给定一个映射到Hibernate的对象的实例,它可以处于四种不同状态中的任何一种:瞬态,持久,分离或删除。我们今天将在这个 Hibernate 教程中学习它们。

在Hibernate中使用内存数据库

在此示例中,我使用HSQLDB数据库通过我们的 Hibernate 代码创建和访问内存数据库。

Hibernate JPAconcatenated 类型

为了启用concatenated 和逆向效果,我们在实体中使用了“ CascadeType”属性。在本教程中,我们将学习通过CascadeType进行concatenated 的各种可用选项。

Hibernate 注解与映射的优缺点

您可能知道,在内联注解之前,创建 Hibernate 映射的唯一方法是通过XML文件。尽管来自Hibernate和第三方项目的各种工具允许部分或全部映射从Java源代码自动生成。今天,注解是定义映射的最新方法,但并不是自动的最佳方法。在讨论何时应用它们时,让我们讨论 Hibernate (或我应该说JPA)注解的缺点和好处。

Hibernate 查询语言[HQL]

HQL是一种类似于SQL的面向对象的查询语言,但是HQL不会对表和列进行操作,而是处理持久性对象及其属性。它是JPQL(Java持久性查询语言)的超集;JPQL查询是有效的HQL查询,但并非所有HQL查询都是有效的JPQL查询。HQL是一种具有自己的语法和语法的语言。

让我们使用以下示例学习HQL:

  1. 基本HQL语法
    • 更新操作
    • 删除操作
    • 插入操作
    • 选择操作
  2. 来自条款和别名
  3. 选择子句和投影
  4. 使用命名参数
  5. 分页结果集
  6. 获得独特的结果
  7. 按条款对结果进行排序
  8. 社团协会
  9. 汇总方法
  10. 命名查询
  11. 使用本机SQL
  12. 启用日志记录和评论

Hibernate criteria 查询

Criteria Query API使您可以用Java构建嵌套的结构化查询表达式,从而提供了编译时语法检查,而这是使用HQL或SQL这样的查询语言无法实现的。Criteria API还包括示例查询(QBE)功能。这样,您就可以提供示例对象,这些对象包含要检索的属性,而不必逐步说明查询的组件。它还包括投影和聚合方法,包括count()。让我们详细探讨它的不同功能。

  1. 基本用法示例
  2. 对条件使用限制
  3. 分页结果集
  4. 获得独特的结果
  5. 获得不同的结果
  6. 对查询结果进行排序
  7. 表演协会(加入)
  8. 添加投影
  9. 示例查询(QBE)
  10. 摘要

Hibernate 中的延迟加载

在本教程中,我将讨论 Hibernate 中必须被称为延迟加载的功能。如果您在大型应用程序中工作,这特别有用。

CRUD操作实例

Hello world插入数据

在本教程中,我给出了在单个表中插入数据的示例。

Hibernate命名查询教程

Hibernate 中的命名查询是一种将HQL语句分组在单个位置的技术,并在以后需要使用它们时以某种名称对其进行引用。由于这些HQL语句不再分散在整个代码中,因此在很大程度上有助于代码清除。

从数据库示例加载实体

使用load或get方法加载 Hibernate 实体的示例。

Save()和saveOrUpdate()用于保存实体

请不要创建使用 Hibernate 注解映射的类的实例不会自动将对象持久保存到数据库中。将其附加到有效的 Hibernate 会话后,必须显式保存它。让我们学习如何做。

合并和刷新实体

在本教程中,我将讨论有关 Hibernate 会话类中存在的refresh()和merge()方法的一些想法。

Hibernate 实体映射

使用注解 Hibernate 一对一映射

让我们讨论一下hibernate支持的一对一映射的变体:

  1. 使用外键关联
  2. 使用通用联接表
  3. 使用共享主键

使用注解 Hibernate 一对多映射

讨论 Hibernate 中支持的一对多映射的变体:

  1. 使用外键关联
  2. 使用联接表

使用注解 Hibernate 多对多映射

讨论 Hibernate 中支持的多对多映射的变体。

Hibernate 连接池和缓存

C3P0连接池配置教程

默认情况下,Hibernate使用JDBC连接以便与数据库进行交互。创建这些连接非常昂贵-Hibernate在典型的使用情况下可能会执行最昂贵的单个操作。由于JDBC连接管理非常昂贵,因此您可能会建议您使用连接池,它可以提前打开连接(并仅在需要时关闭它们,而不是“不再使用时”)。

C3P0是外部连接池的示例。在本教程中,我们将学习将其与hibernate一起使用。

Hibernate EhCache配置

缓存是ORM框架提供的功能,可帮助用户获得快速运行的Web应用程序,同时帮助框架本身减少在单个事务中对数据库的查询数量。Hibernate还在第一级和第二级提供此缓存功能。

在本教程中,我将举一个使用ehcache配置作为hibernate中的二级缓存的示例。

带有示例的Hibernate一级缓存

默认情况下, Hibernate 状态下的第一级缓存已启用,您无需执行任何操作即可使此功能正常工作。让我们进一步了解它。

Hibernate二级缓存示例

在本教程中,我将提供有关 Hibernate 二级缓存的概念,并提供使用代码段的示例。

Hibernate 最佳做法

Hibernate @NaturalId用法和示例

Hibernate 4带来了许多改进,而@NaturalId就是这样很好的改进之一。如您所知,@ Id注解用作指定实体主键的元数据。但是有时,实体通常在DAO层代码中使用ID,该ID不是主键,而是其逻辑或自然ID。在这种情况下,@ NaturalId注解将证明是 Hibernate 状态下命名查询的良好替代。

获取实体引用以进行延迟加载

延迟加载是计算机编程中常用的一种设计模式,用于将对象的初始化推迟到需要它的时间点。可以通过在 Hibernate 映射注解中指定“ fetch = FetchType.LAZY”来完成 Hibernate 延迟加载。

与其他框架的整合

将Hibernate与Spring框架集成

本 Hibernate 教程侧重于将Spring 3框架与Hibernate结合使用。我将展示这种集成的结果,一个基本的端到端应用程序 Stream 看起来如何。

您可能会遇到的异常

问题:初始SessionFactory创建失败。org.hibernate.HibernateException:命名查询中的错误

Hibernate教程参考

Hibernate 文档

34

 发表评论

13
21
0
 17
  订阅  

saigon has written 1445 articles