在一個真正的OOAD中,我們的設計首先是做UML建摸,最終將一個系統(tǒng)涉及所有對象(這個東西不是東西那么簡單)用類圖來體現(xiàn)一個完整的設計,我們最后可能得到這幾種類:控制業(yè)務邏輯的類,保存業(yè)務數(shù)據(jù)的 " /> www.99日本精品片com,黄色片网址,国产欧美综合一区二区三区

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

Java開源項目Hibernate

  一)Hibernate意義

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

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

  二)對象模型與關系數(shù)據(jù)庫模型差異

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

  問題領域:

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

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

  1) 以對象看待世界。

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

  而關系數(shù)據(jù)庫模型唯一出發(fā)點是有效儲存數(shù)據(jù),KEY是數(shù)據(jù)庫的關鍵技術,關系在這里只是各個數(shù)據(jù)表的KEY之間的關聯(lián),這種關聯(lián)我覺得應該稱之為數(shù)據(jù)的關聯(lián),其表達的意義遠遠沒有對象之間的關聯(lián)那么深廣。

  那么,我現(xiàn)在最關心的問題是hibernate是怎么利用關系數(shù)據(jù)庫的數(shù)據(jù)表KEY關聯(lián)來表達對象之間的關系呢?

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

  我們設計的代表數(shù)據(jù)層的所有類必須完美的體現(xiàn)在數(shù)據(jù)表之中。可以這樣總結:

  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的一行。這個問題很簡單的得到解決。

  再進一步,考慮如下簡單的一對一類關聯(lián):

  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,那么體現(xiàn)到數(shù)據(jù)表中呢?首先可以肯定class1àtable1,class2àtable2;很顯然,table1和table2都要互相增加多一列來保存對方的key。

  這些簡單的關系在數(shù)據(jù)庫表的關聯(lián)中得到了很好的支持,但是稍微復雜一點的呢?

  諸如以下一個類:

  public class S {
  ArrayList datas;
  Public List getDatas()..
  Public void setDatas(List datas)..
  ….
  }

  這里如果簡單用上面所分析的propertyname-àColumnName顯然不可以,這種集合作為bean屬性我們該怎么在數(shù)據(jù)表中得到很好體現(xiàn)呢?如果這些集合只是簡單的String 集合,它在數(shù)據(jù)庫表里面是怎么表述的呢?如果這些集合是保存某些類實例的,似乎可以轉(zhuǎn)換為數(shù)據(jù)庫表的一對多的關系?

  另外一方面,繼承體系是怎么在數(shù)據(jù)塊表里面得到體現(xiàn)的呢?繼承的關系怎么用數(shù)據(jù)庫的關聯(lián)關系表達呢?繼承所涉及的動態(tài)類識別怎么在數(shù)據(jù)庫中得到體現(xiàn)呢?

  再往深處想一想,對于一個操作:

  public class BookStore{
  Set books;
  Public Set getBoos()..
  Public void setBooks(Set boos)…
  Public void addBook(Book book)…
  public class Book{
  public BookStore bookStore;
  public Parent getBookStore()..
  ..
  }

  在業(yè)務邏輯中,我們會這樣寫代碼:

  Book book=new Book();
  .bookStore.addBooks(book);

  上面兩行代碼便已經(jīng)清楚地建立了child與parent之間的關系,相對來說,數(shù)據(jù)庫中的數(shù)據(jù)也應該根據(jù)這幾行代碼建立產(chǎn)生數(shù)據(jù)并建立這種關聯(lián)。此時內(nèi)存中的數(shù)據(jù)怎么跟數(shù)據(jù)庫中的數(shù)據(jù)一致呢?

jsp技術Java開源項目Hibernate,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩中文字幕在线播放 | 欧美中文在线 | 亚洲精品一区二三区不卡 | 亚洲精品在线免费播放 | 亚洲精品乱码久久久久久蜜桃91 | 91视频三区| 亚洲精品99999 | 人人玩人人干 | 一级片在线观看 | 日本一级淫片免费啪啪3 | 亚洲高清在线观看 | 国产精品久久久久久久一区探花 | 国产1区 | 亚洲情综合五月天 | 91看片网 | 中文字幕一区二区三区四区五区 | 亚洲欧美高清 | 欧美一区二区 | 一区二区三区四区在线视频 | 人妖videosex高潮另类 | 国产福利在线小视频 | a视频在线 | 天天搞天天操 | 无码日韩精品一区二区免费 | 91久久精品视频 | 成人av色| 欧美一级精品片在线看 | 91免费看片 | 日韩视频免费 | 一级毛片网 | 人人干97| 久久久久亚洲精品 | 精品96久久久久久中文字幕无 | 在线一区视频 | a久久| 在线日韩福利 | 特级毛片爽www免费版 | 亚洲欧美日韩精品久久亚洲区 | 黑人精品| 人人看人人爽 | 成人妇女免费播放久久久 |