Hibernate 简明教程
Hibernate - ORM Overview
What is JDBC?
JDBC 代表 Java Database Connectivity 。它提供了一组 Java API,用于从 Java 程序访问关系数据库。这些 Java API 使 Java 程序能够执行 SQL 语句和与任何 SQL 兼容数据库进行交互。
JDBC 提供了一个灵活的架构来编写一个数据库独立的应用程序,该应用程序可以在不同的平台上运行并与不同的 DBMS 交互,而无需进行任何修改。
Pros and Cons of JDBC
Pros of JDBC |
Cons of JDBC |
干净而简单的 SQL 处理使用大型数据时性能良好非常适合小型应用程序语法简单,易于学习 |
如果用于大型项目,则很复杂编程开销大没有封装难以实现 MVC 概念查询特定于 DBMS |
Why Object Relational Mapping (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)
);
第一个问题是,如果在开发了一些页面或应用程序后需要修改数据库的设计,该怎么办?其次,在关系数据库中加载和存储对象会使我们面临以下五个不匹配问题:
Sr.No. |
Mismatch & Description |
1 |
Granularity 有时你会遇到一个对象模型,它比数据库中对应表的数量有更多的类。 |
2 |
Inheritance RDBMS 并没有定义类似于继承的概念,这是面向对象编程语言中的一种自然范式。 |
3 |
Identity 一个 RDBMS 定义了一个完全相同的概念:“主键”。然而,Java 定义了对象标识 (a==b) 和对象相等 (a.equals(b))。 |
4 |
Associations 面向对象语言使用对象引用表示关联,而 RDBMS 将关联表示为外键列。 |
5 |
Navigation 在 Java 和 RDBMS 中访问对象的方式有根本性的不同。 |
*O*对象-*R*关系映射 (ORM) 是解决上述所有阻抗失配问题的办法。
What is ORM?
ORM 代表 *O*对象-*R*关系映射 (ORM) 是一种用于转换关系数据库和诸如 Java、C# 等面向对象编程语言之间数据的编程技术。
与纯 JDBC 相比,一个 ORM 系统有以下优点:
Sr.No. |
Advantages |
1 |
让业务代码访问对象而不是数据库表。 |
2 |
将 SQL 查询的详细信息隐藏在面向对象逻辑中。 |
3 |
基于“底层”的 JDBC。 |
4 |
无需处理数据库实现。 |
5 |
实体基于业务概念而不是数据库结构。 |
6 |
事务管理和自动键生成。 |
7 |
Fast development of application. |
一个 ORM 解决方案包含以下四个实体:
Sr.No. |
Solutions |
1 |
对持久类对象执行基本 CRUD 操作的 API。 |
2 |
一个语言或 API 用于指定引用类和类属性的查询。 |
3 |
一种用于指定映射元数据的可配置工具。 |
4 |
与事务性对象交互以执行脏数据检查、惰性关联提取和其他优化函数的技术。 |