黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

Hibernate ORM 概覽

hibernate orm 概覽

 

什么是 jdbc?

jdbc 是 java database connectivity 的簡寫,它提供了一組 java api 來訪問關(guān)系數(shù)據(jù)。

這些 java apis 可以使 java 應(yīng)用程序執(zhí)行 sql 語句,能夠與任何符合 sql 規(guī)范的數(shù)據(jù)庫進(jìn)行交互。

jdbc 提供了一個靈活的框架來編寫操作數(shù)據(jù)庫的獨(dú)立的應(yīng)用程序,該程序能夠運(yùn)行在不同的平臺上且不需修改,能夠與不同的 dbms 進(jìn)行交互。

 

jdbc 的優(yōu)點(diǎn)和缺點(diǎn)

jdbc 的優(yōu)點(diǎn) jdbc 的缺點(diǎn)
干凈整潔的 sql 處理 大項目中使用很復(fù)雜
大數(shù)據(jù)下有良好的性能 很大的編程成本
對于小應(yīng)用非常好 沒有封裝
易學(xué)的簡易語法 難以實(shí)現(xiàn) mvc 的概念
  查詢需要指定 dbms

 

為什么使用對象關(guān)系映射(orm)?

當(dāng)我們工作在一個面向?qū)ο蟮南到y(tǒng)中時,存在一個對象模型和關(guān)系數(shù)據(jù)庫不匹配的問題。

rdbms 用表格的形式存儲數(shù)據(jù),然而像 java 或者 c# 這樣的面向?qū)ο蟮恼Z言它表示一個對象關(guān)聯(lián)圖。

考慮下面的帶有構(gòu)造方法和公有方法的 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;
   }
}

現(xiàn)考慮以上的對象需要被存儲和索引進(jìn)下面的 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)
);

第一個問題,如果我們開發(fā)了幾頁代碼或應(yīng)用程序后,需要修改數(shù)據(jù)庫的設(shè)計怎么辦?

第二個問題,在關(guān)系型數(shù)據(jù)庫中加載和存儲對象時我們要面臨以下五個不匹配的問題。

不匹配 描述
粒度 有時你將會有一個對象模型,該模型類的數(shù)量比數(shù)據(jù)庫中關(guān)聯(lián)的表的數(shù)量更多
繼承 rdbmss 不會定義任何在面向?qū)ο缶幊陶Z言中本來就有的繼承
身份 rdbms 明確定義一個 'sameness' 的概念:主鍵。然而,java 同時定義了對象判等(a==b)和 對象值判等(a.equals(b))
關(guān)聯(lián) 面向?qū)ο蟮木幊陶Z言使用對象引用來表示關(guān)聯(lián),而一個 rdbms 使用外鍵來表示對象關(guān)聯(lián)
導(dǎo)航 在 java 中和在 rdbms 中訪問對象的方式完全不相同

object-relational mapping (orm) 是解決以上所有不匹配問題的方案。

 

什么是 orm?

orm 是 object-relational mapping 的簡寫,是一個方便在關(guān)系數(shù)據(jù)庫和類似于 java, c# 等面向?qū)ο蟮木幊陶Z言中轉(zhuǎn)換數(shù)據(jù)的技術(shù)。一個 orm 系統(tǒng)相比于普通的 jdbc 有以下的優(yōu)點(diǎn)。

序號 優(yōu)點(diǎn)
1 使用業(yè)務(wù)代碼訪問對象而不是數(shù)據(jù)庫中的表
2 從面向?qū)ο筮壿嬛须[藏 sql 查詢的細(xì)節(jié)
3 基于 jdbc 的 'under the hood'
4 沒有必要去處理數(shù)據(jù)庫實(shí)現(xiàn)
5 實(shí)體是基于業(yè)務(wù)的概念而不是數(shù)據(jù)庫的結(jié)構(gòu)
6 事務(wù)管理和鍵的自動生成
7 應(yīng)用程序的快速開發(fā)

一個 orm 解決方案由以下四個實(shí)體組成:

序號 優(yōu)點(diǎn)
1 一個 api 來在持久類的對象上實(shí)現(xiàn)基本的 crud 操作
2 一個語言或 api 來指定引用類和屬性的查詢
3 一個可配置的服務(wù)用來指定映射元數(shù)據(jù)
4 一個技術(shù)和事務(wù)對象交互來執(zhí)行 dirty checking, lazy association fetching 和其它優(yōu)化的功能

 

java orm 框架

在 java 中有幾個持久化的框架和 orm 選項。一個持久化的框架是 orm 存儲和索引對象到關(guān)系型數(shù)據(jù)庫的服務(wù)。

  • enterprise javabeans entity beans
  • java data objects
  • castor
  • toplink
  • spring dao
  • hibernate
  • and many more

下一節(jié):hibernate 簡介

hibernate 教程

相關(guān)文章