ORM (Object Realtional Mapping)即對(duì)象關(guān)系映射,它是一種基于關(guān)系型數(shù)據(jù)庫(kù)的程序技術(shù)。ORM 允許你使用類和對(duì)象對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,這大大提高了對(duì)數(shù)據(jù)庫(kù)的控制,避免了直接使用 SQL 語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
Web 開發(fā)中對(duì)數(shù)據(jù)庫(kù)的操作是必不可少的,然而每種數(shù)據(jù)庫(kù)的操作方式以及用法不盡相同
由于各種框架中ORM 的存在, 如 Python框架的Django模型, PHP語(yǔ)言ThinkPHP框架中的模型, JAVA語(yǔ)言框架MyBatis等為我們操作不同種類的數(shù)據(jù)庫(kù)提供了統(tǒng)一的方法, ORM 適配了多種常用的關(guān)系型數(shù)據(jù)庫(kù),例如 MySQL、Oracle、Sqlite3,PostgreSQL 等。
ORM 模塊確實(shí)有諸多的優(yōu)勢(shì),比如:
使用該模塊只需要面向?qū)ο缶幊?,不需要面向?shù)據(jù)庫(kù)編寫代碼,對(duì)數(shù)據(jù)庫(kù)的操作轉(zhuǎn)換為對(duì)類屬性和方法的操作,不用我們編寫各種數(shù)據(jù)庫(kù)的 SQL 語(yǔ)句。
實(shí)現(xiàn)數(shù)據(jù)模型與數(shù)據(jù)庫(kù)的解耦,屏蔽了不同數(shù)據(jù)庫(kù)操作上的差異化,不在關(guān)注不同數(shù)據(jù)庫(kù)內(nèi)部的操作細(xì)節(jié),通過(guò)簡(jiǎn)單更改配置就可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更換而無(wú)需更改代碼。
與此同時(shí) ORM 也存在一點(diǎn)不足之處:
相比直接用 SQL 語(yǔ)句操作數(shù)據(jù)庫(kù)會(huì)有性能損失,因?yàn)樵谟成涞倪^(guò)程中 ORM 需要與 SQL 之間進(jìn)行轉(zhuǎn)換,根據(jù)對(duì)象的操作轉(zhuǎn)換成 SQL 語(yǔ)句,根據(jù)查詢結(jié)果轉(zhuǎn)換成對(duì)象,所以在映射的過(guò)程存在性能損失。
但是 ORM 的不足帶來(lái)的這點(diǎn)性能損失是微不足道的,ORM 的優(yōu)勢(shì)還是非常突出的。因?yàn)檫@種對(duì)象模型和關(guān)系型數(shù)據(jù)庫(kù)之間的轉(zhuǎn)換方式,給開發(fā)者帶來(lái)了極大的便捷,所以其它語(yǔ)言開發(fā)的框架,對(duì) ORM 也有很多應(yīng)用,比如 Hibernate、IBATIS、EclipseLink 等。