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
相关文章
相关标签/搜索