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

与事务性对象交互以执行脏数据检查、惰性关联提取和其他优化函数的技术。

Java ORM Frameworks

在 Java 中有几个持久框架和 ORM 选项。持久性框架是一种将对象存储到关系数据库并从关系数据库中检索对象的 ORM 服务。

  1. Enterprise JavaBeans Entity Beans

  2. Java Data Objects

  3. Castor

  4. TopLink

  5. Spring DAO

  6. Hibernate

  7. And many more