今天開始對項目的數據進行OR MAPPING,我根據使用HIBERNATE的經驗來做,到也不覺得很困難,現在對這部分總結一下.
說到OR MAPPING,總體來說要根據OO的特性來做,即"封裝","繼承","多態".而"多態"實際上是個動態的概念,因此MAPPING工作的重點就是"封裝"和"繼承".而"封裝"中除了數據的封裝外,還有實體間關係的表示.具體來看,無非這麼幾種關係:
一對一
一對多(多對一)
多對多
這次系統數據結構的設計沒有用到繼承,所以僅僅針對封裝的這幾種關係來說.
一對一
RAILS使用一對"has_one"和"belongs_to"來描述這種關係,等同於hibernate裏的一對""和""
一對多(多對一)
這種關係也可以被稱爲雙象映射,但是這裏的雙方關係卻不是對稱的.RAILS使用一對"has_many"和"belongs_to"來表示,等同於hibernate裏面的和.
多對多
這種關係的表示得需要一箇中間表,hibernate的做法是程序員得指定告訴hibernate這個中間表是誰,而rails的做法是規定死了,這個中間表的名子是兩個關聯表名中間加個下劃線,並且,這兩個表名以字母順序排列,比如表A和表B有多對多關聯,則這個中間表必需爲A_B.實現上,是通過在雙方加上"has_and_belongs_to_many"來實現,比hibernate簡化了不少.不過,如果字母一樣怎麼辦?比如rights跟roles的關聯表.這個我還沒有試驗.
總結來看,建立起靜態關聯關係是很容易的,不過這種關聯關係在訪問的時候具體如何來維護?有什麼規則?這還需要在寫業務代碼時再考慮了.
說到OR MAPPING,總體來說要根據OO的特性來做,即"封裝","繼承","多態".而"多態"實際上是個動態的概念,因此MAPPING工作的重點就是"封裝"和"繼承".而"封裝"中除了數據的封裝外,還有實體間關係的表示.具體來看,無非這麼幾種關係:
一對一
一對多(多對一)
多對多
這次系統數據結構的設計沒有用到繼承,所以僅僅針對封裝的這幾種關係來說.
一對一
RAILS使用一對"has_one"和"belongs_to"來描述這種關係,等同於hibernate裏的一對""和""
一對多(多對一)
這種關係也可以被稱爲雙象映射,但是這裏的雙方關係卻不是對稱的.RAILS使用一對"has_many"和"belongs_to"來表示,等同於hibernate裏面的和.
多對多
這種關係的表示得需要一箇中間表,hibernate的做法是程序員得指定告訴hibernate這個中間表是誰,而rails的做法是規定死了,這個中間表的名子是兩個關聯表名中間加個下劃線,並且,這兩個表名以字母順序排列,比如表A和表B有多對多關聯,則這個中間表必需爲A_B.實現上,是通過在雙方加上"has_and_belongs_to_many"來實現,比hibernate簡化了不少.不過,如果字母一樣怎麼辦?比如rights跟roles的關聯表.這個我還沒有試驗.
總結來看,建立起靜態關聯關係是很容易的,不過這種關聯關係在訪問的時候具體如何來維護?有什麼規則?這還需要在寫業務代碼時再考慮了.