程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java開源項目Hibernate

Java開源項目Hibernate

編輯:JAVA編程入門知識

一)Hibernate意義

在一個真正的OOAD中,我們的設計首先是做UML建摸,最終將一個系統涉及所有對象(這個東西不是東西那麼簡單)用類圖來體現一個完整的設計,我們最後可能得到這幾種類:控制業務邏輯的類,保存業務數據的類module(bean類),輔助類或者更多(具體問題具體分析,但是將業務所需數據歸結為一個類module更適合分層)。到數據庫低層實現的時候,

為了獲取數據或者存儲數據,你不得不為此加上一個操作數據庫的控制邏輯,到此,你完美的設計估計會為此付出巨大的努力,因為你看到的業務數據層是一個復雜的模塊,即使從面向對象觀點來看,我們UML類圖中的,業務數據層只是一個數據模塊。Hibernate已經幫我們解決了業務數據層這個本來十分復雜的模塊的底層實現,現在,我們只要在外層裹上我們的代表數據的類即可。

二)對象模型與關系數據庫模型差異

在寫出我初探Hibernate的感受之前,我覺得寫下這一節還是很有必要的。帶著問題研究遠遠比帶著好奇研究要意義深遠得多。

問題領域:

關系型數據庫是存儲數據的最好選擇,但是隨著OO技術日益發展,在persisitent層上關系型數據庫的設計體系與OO體系格格不入,可以想象,當滿腦子充斥著OOAD的你想到怎麼隔離滿天飛的SQL語句時,那是多麼痛苦的表情。無論你的業務層設計多麼完美,在真正儲存數據或者加載數據時,你面對的無非是一大堆封裝好的數據,這些數據在JDBC中已經完全失去對象(這裡的對象稱之為業務對象或許更為確切)的意義,你整體的OOAD到此為止。為什麼會造成這種情況呢?原因是對象模型與關系數據庫模型根本設計體系之間的差別。

對象模型與關系數據庫模型各自理論出發點是不同的:對象模型的理論體系可以簡單歸結為這兩點:

1) 以對象看待世界。

2) 對象間關系(繼續,關聯,聚合,組合)維系著整體構成。

而關系數據庫模型唯一出發點是有效儲存數據,KEY是數據庫的要害技術,關系在這裡只是各個數據表的KEY之間的關聯,這種關聯我覺得應該稱之為數據的關聯,其表達的意義遠遠沒有對象之間的關聯那麼深廣。

那麼,我現在最關心的問題是hibernate是怎麼利用關系數據庫的數據表KEY關聯來表達對象之間的關系呢?

在進入正式研究Hbernate之前,我們可以思考一下問題的似乎簡單與似乎十分復雜的矛盾。

我們設計的代表數據層的所有類必須完美的體現在數據表之中。可以這樣總結:

class-àtable

class1—(關系)---class2------〉table1---(關系)-----table2

問題的解決似乎很簡單,非凡是對於Javabean構架,更是簡單(看起來簡單而已!!!)。

想象一個簡單的javabean類:

public class SimpleBean{
  protected int id;
  protected String name;
  public int getId(){
  return id;
  }
  public void setId(int id){
  this.id=id;
  }
  public String getName(){
  return name;
  }
  public void setName(String name){
  this,name=name;
  }
  }

我們完全可以這樣進行name映射:

className-àtableName

propertyNameàcolumnName

一個類實例就是table的一行。這個問題很簡單的得到解決。

再進一步,考慮如下簡單的一對一類關聯:

public class Class1{
  public Class2 class2;
  public Class2 getclass2()…
  public void setClass2(Class2 class2)…
  }
  public class Class2{
  public Class1 class1;
  public Class1 getClass1()...
  ...
  }

這種關系很顯然是雙向的,可以從class1中得到class2,反過來,也可以從class2中得到class1,那麼體現到數據表中呢?首先可以肯定class1àtable1,class2àtable2;很顯然,table1和table2都要互相增加多一列來保存對方的key。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved