Hibernate ORM 概覽
hibernate orm 概覽
什么是 jdbc?
jdbc 是 java database connectivity 的簡寫,它提供了一組 java api 來訪問關系數據。
這些 java apis 可以使 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) );
第一個問題,如果我們開發了幾頁代碼或應用程序后,需要修改數據庫的設計怎么辦?
第二個問題,在關系型數據庫中加載和存儲對象時我們要面臨以下五個不匹配的問題。
不匹配 | 描述 |
---|---|
粒度 | 有時你將會有一個對象模型,該模型類的數量比數據庫中關聯的表的數量更多 |
繼承 | rdbmss 不會定義任何在面向對象編程語言中本來就有的繼承 |
身份 | rdbms 明確定義一個 'sameness' 的概念:主鍵。然而,java 同時定義了對象判等(a==b)和 對象值判等(a.equals(b)) |
關聯 | 面向對象的編程語言使用對象引用來表示關聯,而一個 rdbms 使用外鍵來表示對象關聯 |
導航 | 在 java 中和在 rdbms 中訪問對象的方式完全不相同 |
object-relational mapping (orm) 是解決以上所有不匹配問題的方案。
什么是 orm?
orm 是 object-relational mapping 的簡寫,是一個方便在關系數據庫和類似于 java, c# 等面向對象的編程語言中轉換數據的技術。一個 orm 系統相比于普通的 jdbc 有以下的優點。
序號 | 優點 |
---|---|
1 | 使用業務代碼訪問對象而不是數據庫中的表 |
2 | 從面向對象邏輯中隱藏 sql 查詢的細節 |
3 | 基于 jdbc 的 'under the hood' |
4 | 沒有必要去處理數據庫實現 |
5 | 實體是基于業務的概念而不是數據庫的結構 |
6 | 事務管理和鍵的自動生成 |
7 | 應用程序的快速開發 |
一個 orm 解決方案由以下四個實體組成:
序號 | 優點 |
---|---|
1 | 一個 api 來在持久類的對象上實現基本的 crud 操作 |
2 | 一個語言或 api 來指定引用類和屬性的查詢 |
3 | 一個可配置的服務用來指定映射元數據 |
4 | 一個技術和事務對象交互來執行 dirty checking, lazy association fetching 和其它優化的功能 |
java orm 框架
在 java 中有幾個持久化的框架和 orm 選項。一個持久化的框架是 orm 存儲和索引對象到關系型數據庫的服務。
- enterprise javabeans entity beans
- java data objects
- castor
- toplink
- spring dao
- hibernate
- and many more