ORM中的一些概念

[TOC]

學習ORM過程中的一些概念理解

ORM

  1. 代碼中的類和數據庫中的表的映射.
  2. 代碼中的實例和數據庫中的記錄的映射.

下圖是一個最簡單的映射圖

clipboard.png

下圖是一個比較完整的映射圖,包含了一對多,多對一這種映射關係.

clipboard.png

數據持久化 VS 爲什麼要持久化

數據持久化

數據持久化,就是將數據(就是變量裏面的值)保存起來(從內存等掉電丟失的設備 --> 硬盤等掉電可以恢復的設備上),以便將來用到的時候能夠很方便的恢復.在ORM這裏特指將數據保存到數據庫.

所以本文中的數據持久化就是將內存中的數據模型(任何數據結構或對象)轉換爲存儲模型(關係模型,XML,二進制流),以及將存儲模型轉換爲內存中的數據模型的統稱.

數據模型可以是任何數據結構或對象模型,存儲模型可以是關係模型,XML,二進制流等.

爲什麼要持久化?

持久化封裝了數據訪問細節.

  1. 可以減少訪問數據庫存儲模型的次數
  2. 代碼可重用
  3. 低耦合,數據模型和存儲模型分離,不依賴於底層數據庫的類型,更換數據庫更容易.

domain model

數據模型如果是面向對象方式,也叫domain model .

Active Record VS Data Mapper

ORM裏面分成兩種類型.

Active Record

持久化過程和domain model關係比較緊密,或者說,domain model集成了持久化過程的方法,這種模式就叫做Active Record.

Ruby On Rails裏面的ORM好像也叫Active Record,與本文中的Active Record不是一個概念.當然ROR中的Active Record也是Active Record類型.

例子

user_record = User(name="ed", fullname="Ed Jones")
user_record.save()
user_record = User.query(name='ed').fetch()
user_record.fullname = "Edward Jones"
user_record.save()

Data Mapper

domain model和持久化過程是分開的.

例子,看主體

dbsession = start_session() # 持久化
user_record = User(name="ed", fullname="Ed Jones") # domain model
dbsession.add(user_record) # 持久化
user_record = dbsession.query(User).filter(name='ed').first() # 持久化
user_record.fullname = "Edward Jones" # domain model
dbsession.commit() # 持久化

舉例

  • Active Record

    • Django ORM
  • Data Mapper

    • SQLalchemy
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章