对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,来实现面向对象语言程序中的对象与关系数据库中的关系的映射。根据对象与关系数据库的特性,ORM一般在以下几个方面实现。
1.类的属性映射为数据表的字段
将类中的属性映射成数据表的字段是一种很自然的想法,但是类的属性和数据表的字段并不是一一对应的。一个属性可以对应0或多个数据表字段。比如,作为保存中间结果或标明类在某一运行时刻状态的属性就不需要保存在数据库表中。
2.类映射成数据表
将类映射成数据表时,通常采用的映射策略有以下几种:
(1)一个类层次对应一个数据表
这里所说的一个类层次,指的是父类及其所有子类。将父类和子类中有持久性需求的属性映射到一张数据表中,使用一个标志字段区分各个子类。这种方法实现起来比较简单,但是类与数据库之间的耦合程度较高;并且因为子类所特有的属性都被映射成了字段,所以数据表中的冗余字段比较多,空值也有很多,空间的利用率较低。
目前来说,有一种方法可以克服这种映射方式冗余列多的缺点,那就是将子类的公共属性映射成一个字段,该字段使用json或xml等方式存储子类的所有特有属性。但是这种方法并不符合数据库设计中的1NF范式,应为该字段还可以进一步细分。
(2)一个实体类对应一个数据表
在这种实现方式中,父类并不映射成数据库中的表,只有子类会被映射成数据库中的表,该表的字段包括从父类继承的属性以及子类特有的属性。这种映射模型使得类