成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談Hibernate為何是Java開源項目

開發 后端
Java Hibernate有很多值得學習的地方,這里我們主要介紹Hibernate意義和對象模型與關系數據庫模型差異。

Java Hibernate還是比較常用的,于是我研究了一下對象模型與關系數據庫模型差異 ,在這里拿出來和大家分享一下,希望對大家有用

一Hibernate意義

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

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

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

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

問題領域:

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

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

1) 以對象看待世界。

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

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

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

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

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

class-àtable

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

問題的解決似乎很簡單,特別是對于javabean構架,更是簡單(看起來簡單而已!!!)。

想象一個簡單的javabean類:

  1. public class SimpleBean{   
  2.   protected int id;   
  3.   protected String name;   
  4.   public int getId(){   
  5.   return id;   
  6.   }   
  7.   public void setId(int id){   
  8.   this.id=id;   
  9.   }   
  10.   public String getName(){   
  11.   return name;   
  12.   }   
  13.   public void setName(String name){   
  14.   this,namename=name;   
  15.   }   
  16.   }   

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

  1. className-àtableName   
  2.  
  3.   propertyNameàcolumnName  

一個類實例就是table的一行。這個問題很簡單的得到解決。再進一步,考慮如下簡單的一對一類關聯:

  1. public class Class1{   
  2.   public Class2 class2;   
  3.   public Class2 getclass2()…   
  4.   public void setClass2(Class2 class2)…   
  5.   }   
  6.   public class Class2{   
  7.   public Class1 class1;   
  8.   public Class1 getClass1()...   
  9.   ...   
  10.   }   

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

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

諸如以下一個類:

  1. public class S {   
  2.   ArrayList datas;   
  3.   Public List getDatas()..   
  4.   Public void setDatas(List datas)..   
  5.   ….   
  6.   }   

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

另外一方面,繼承體系是怎么在數據塊表里面得到體現的呢?繼承的關系怎么用數據庫的關聯關系表達呢?繼承所涉及的動態類識別怎么在數據庫中得到體現呢?

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

  1. public class BookStore{   
  2.   Set books;   
  3.   Public Set getBoos()..   
  4.   Public void setBooks(Set boos)…   
  5.   Public void addBook(Book book)…   
  6.   public class Book{   
  7.   public BookStore bookStore;   
  8.   public Parent getBookStore()..   
  9.   ..   
  10.   }   

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

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

上面兩行代碼便已經清楚地建立了child與parent之間的關系,相對來說,數據庫中的數據也應該根據這幾行代碼建立產生數據并建立這種關聯。此時內存中的數據怎么跟數據庫中的數據一致呢?

【編輯推薦】

  1. Hibernate入門學習寶典
  2. Hibernate屬性簡單分析
  3. Struts-Spring-Hibernate案例
  4. Hibernate Sessin接口常用方法
  5. Hibernate事務全面介紹
責任編輯:仲衡 來源: it168
相關推薦

2015-07-30 09:22:49

開源項目

2021-03-23 14:51:03

半導體芯片手機廠商

2022-06-19 14:10:48

開源軟件企業Linux 基金會

2012-07-26 13:18:15

開源系統

2015-07-30 09:46:42

開源項目

2011-07-14 14:15:31

2011-11-28 10:26:45

SIPOC原創輸出

2012-03-12 17:20:38

微軟Mayhem開源

2009-06-26 16:12:59

2021-01-14 11:05:41

項目配置屬性

2009-09-22 10:46:00

Hibernate項目

2013-06-04 09:07:49

OpenStack開源技術開源云計算

2018-01-24 06:47:37

物聯網開源操作系統

2009-06-24 14:10:27

Java開源GIS項目

2015-07-20 09:35:57

開源商業模式

2013-03-19 09:33:46

項目

2011-06-21 14:46:44

Hibernate

2013-08-13 09:45:16

開源項目

2014-11-04 11:14:25

AzureDocker

2019-09-10 09:58:19

Dubbo負載均衡Hash
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美另类视频 | 日韩欧美在线不卡 | 欧美成年人网站 | 精品欧美乱码久久久久久 | 成人午夜影院 | 国产午夜精品久久久 | 精品视频一区二区在线观看 | 成人免费视频网站在线观看 | 在线免费黄色小视频 | 中文字幕视频在线观看免费 | 国产日韩欧美在线一区 | 成人av免费| 欧美精品一区二区免费 | 日日操夜夜操天天操 | 欧美在线视频一区二区 | 中文字幕亚洲区一区二 | 久久高清国产视频 | 亚洲一区二区久久 | 亚洲国产精选 | 久久69精品久久久久久久电影好 | 红色av社区 | 最近日韩中文字幕 | 欧美一级www片免费观看 | 青青久久久 | 国产精品久久久久影院色老大 | 一区二区三区在线免费观看 | 最新高清无码专区 | 色欧美片视频在线观看 | 艹逼网 | 草久久 | 在线视频一区二区三区 | 国产99久久 | 精品久久久久久久久久久 | 亚洲精品久久久久中文字幕欢迎你 | 超碰人人人人 | 一区二区三区久久 | 国产片侵犯亲女视频播放 | 亚洲性人人天天夜夜摸 | 欧区一欧区二欧区三免费 | 国产探花在线精品一区二区 | 盗摄精品av一区二区三区 |