- Hibernate 教程
- Hibernate - 首页
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架构
- Hibernate - 环境
- Hibernate - 配置
- Hibernate - 会话
- Hibernate - 持久化类
- Hibernate - 映射文件
- Hibernate - 映射类型
- Hibernate - 示例
- Hibernate - O/R 映射
- Hibernate - 级联类型
- Hibernate - 注解
- Hibernate - 查询语言
- Hibernate - Criteria 查询
- Hibernate - 原生 SQL
- Hibernate - 缓存
- Hibernate - 实体生命周期
- Hibernate - 批量处理
- Hibernate - 拦截器
- Hibernate - ID 生成器
- Hibernate - 保存图片
- Hibernate - log4j 集成
- Hibernate - Spring 集成
- Hibernate - Struts 2 集成
- Hibernate - Web 应用
- 映射表示例
- Hibernate - 表继承策略(每个层次结构一张表)
- Hibernate - 表继承策略(每个具体类一张表)
- Hibernate - 表继承策略(每个子类一张表)
- Hibernate 有用资源
- Hibernate - 问题与解答
- Hibernate - 快速指南
- Hibernate - 有用资源
- Hibernate - 讨论
Hibernate - ORM 概述
什么是 JDBC?
JDBC 代表 **Java 数据库连接**。它提供了一组 Java API,用于从 Java 程序访问关系数据库。这些 Java API 使 Java 程序能够执行 SQL 语句并与任何符合 SQL 标准的数据库进行交互。
JDBC 提供了一个灵活的架构来编写数据库独立的应用程序,该应用程序可以在不同的平台上运行并与不同的 DBMS 交互而无需任何修改。
JDBC 的优缺点
JDBC 的优点 | JDBC 的缺点 |
---|---|
简洁明了的 SQL 处理 处理大量数据时性能良好 非常适合小型应用程序 语法简单,易于学习 |
如果在大型项目中使用,则会变得复杂 编程开销大 没有封装 难以实现 MVC 概念 查询特定于 DBMS |
为什么需要对象关系映射 (ORM)?
当我们使用面向对象的系统时,对象模型和关系数据库之间存在不匹配。RDBMS 以表格格式表示数据,而面向对象的语言(如 Java 或 C#)则将其表示为对象的互连图。
考虑以下具有适当构造函数和相关公共函数的 Java 类:
public class Employee { private int id; private String first_name; private String last_name; private int salary; public Employee() {} public Employee(String fname, String lname, int salary) { this.first_name = fname; this.last_name = lname; this.salary = salary; } public int getId() { return id; } public String getFirstName() { return first_name; } public String getLastName() { return last_name; } public int getSalary() { return salary; } }
假设以上对象要存储和检索到以下 RDBMS 表中:
create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) );
第一个问题是,如果我们需要在开发了一些页面或应用程序后修改数据库的设计,该怎么办?其次,在关系数据库中加载和存储对象会使我们面临以下五个不匹配问题:
序号 | 不匹配及描述 |
---|---|
1 |
粒度 有时您将拥有一个对象模型,该模型的类数多于数据库中相应表的数量。 |
2 |
继承 RDBMS 没有定义任何类似于继承的东西,而继承是面向对象编程语言中的自然范例。 |
3 |
标识 RDBMS 定义了“相同”的一个概念:主键。但是,Java 定义了对象标识 (a==b) 和对象相等性 (a.equals(b))。 |
4 |
关联 面向对象的语言使用对象引用来表示关联,而 RDBMS 使用外键列来表示关联。 |
5 |
导航 在 Java 和 RDBMS 中访问对象的方式从根本上不同。 |
**对象关系映射** (ORM) 是解决所有上述阻抗不匹配的方案。
什么是 ORM?
ORM 代表 **对象关系映射** (ORM),是一种将数据在关系数据库和面向对象编程语言(如 Java、C# 等)之间转换的编程技术。
与普通的 JDBC 相比,ORM 系统具有以下优势:
序号 | 优势 |
---|---|
1 | 让业务代码访问对象而不是数据库表。 |
2 | 隐藏 SQL 查询的细节,使其与面向对象逻辑分离。 |
3 | 基于底层的 JDBC。 |
4 | 无需处理数据库实现。 |
5 | 基于业务概念而不是数据库结构的实体。 |
6 | 事务管理和自动键生成。 |
7 | 快速开发应用程序。 |
ORM 解决方案包含以下四个实体:
序号 | 解决方案 |
---|---|
1 | 一个 API,用于对持久化类的对象执行基本的 CRUD 操作。 |
2 | 一种语言或 API,用于指定引用类和类属性的查询。 |
3 | 一个可配置的设施,用于指定映射元数据。 |
4 | 一种与事务对象交互的技术,以执行脏检查、延迟关联提取和其他优化功能。 |
Java ORM 框架
Java 中有几个持久化框架和 ORM 选项。持久化框架是一种 ORM 服务,用于将对象存储和检索到关系数据库中。
- 企业级 JavaBeans 实体 Bean
- Java 数据对象
- Castor
- TopLink
- Spring DAO
- Hibernate
- 还有很多其他框架