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