ORM中的一些概念

[TOC]數據庫

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

ORM

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

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

clipboard.png

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

clipboard.png

數據持久化 VS 爲何要持久化

數據持久化

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

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

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

爲何要持久化?

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

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

domain model

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

Active Record VS Data Mapper

ORM裏面分紅兩種類型.code

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
相關文章
相關標籤/搜索