# Hibernate 框架基础

> 原文： [https://javabeginnerstutorial.com/hibernate/hibernate-framework-basic/](https://javabeginnerstutorial.com/hibernate/hibernate-framework-basic/)

## 什么是 Hibernate

Hibernate 是 Java 语言的对象关系映射（ORM）库，它提供了一个框架，用于将面向对象的域模型映射到传统的关系数据库。 Hibernate 通过使用高级对象处理功能代替与持久性相关的直接数据库访问，解决了对象关系阻抗不匹配的问题。

Hibernate 通过对象/关系映射促进了 Java 域对象的存储和检索。

## Hibernate 功能

*   将 Java 类映射到数据库表&反之亦然
*   数据查询和检索工具
*   基于下划线数据库生成 SQL 查询。 并尝试使开发人员摆脱手工结果集处理和对象转换的麻烦。
*   使应用可移植到所有关系数据库。
*   通过提供不同级别的缓存（第一，第二和查询级别）来提高性能。

## 什么是方言

每个 SQL 供应商都有自己的一组受支持的语法。 这就是所谓的*方言*。 为了生成适当的 SQL 查询，Hibernate 需要知道需要生成哪个 DB 查询。 Hibernate 通过`org.hibernate.dialect.Dialect`类及其子类为每个供应商完成此任务。

例如：

DB2：`org.hibernate.dialect.DB2Dialect`

MySQL：`org.hibernate.dialect.MySQLDialect`

## 什么是 HQL

HQL 是 [**Hibernate 查询语言**](https://javabeginnerstutorial.com/hibernate/hibernate-4-with-query-languages/)的缩写。 这是 hibernate 提供的 SQL 启发式语言。 开发人员可以编写类似查询的 SQL 来处理数据对象。

## 连接池

Hibernate 具有自己的内部[连接池](https://javabeginnerstutorial.com/hibernate/connection-pooling-with-hibernate-4/)，但它也支持某些第三方连接池供生产使用。

*   c3p0 连接池
*   Proxool 连接池
*   使用 JNDI 从应用服务器获得连接

## Hibernate 关联

**什么是 Hibernate 关联**：数据库中的任何表都可以连接到同一数据库或其他数据库中的其他表。 这些表可以通过一些键（外键..）相互关联。 这种情况可以由关联处理。

例如：数据库中有 2 个表格，**学生**，和**科目**。 一个学生可以学习一个科目或一个以上的科目。 在这种情况下，每个学生在“学生”表中将只有一个条目，但“科目”表可能包含多个学生表中相应记录的记录。

关联映射用于将 Java 对象映射到 DB 表。

映射中涉及的实体：

*   类（持久性）（POJO）
*   数据库表
*   映射文件（`.hbm`）

**与 POJO 相关的规则**：

*   POJO 类需要具有默认构造器，这是 Hibernate 所需的。
*   延迟加载不适用于最终类。 最好具有非最终类。

**关联类型**

**单向关联**：

*   多对一
*   一对一
*   一对多

**与联接表**的单向关联

*   多对一
*   一对一
*   一对多
*   多对多

**双向关联**

*   一对多/多对一
*   一对一

**与联接表**的双向关联

*   一对多/多对一
*   一对一
*   多对多

## Hibernate 缓存

缓存是提高系统性能的一种方法，因为它可以减少对数据库的查询。 查询数据库始终会对性能产生影响，因为它是 I/O 操作。 而且 I/O 操作比仅使用应用内存的操作要慢得多。 有两种类型的缓存。

*   一级缓存（实体缓存）
*   二级缓存（查询缓存）

单击此处了解有关 [Hibernate 缓存教程](https://javabeginnerstutorial.com/hibernate/caching-with-hibernate-4/)的更多详细信息。

在下一章中，我们将更详细地介绍这些科目。

