ORM的全稱是:Object Mapping,即對象/關(guān)系數(shù)據(jù)庫映射.
ORM框架是面向?qū)ο蟪绦蛟O(shè)計語言與關(guān)系數(shù)據(jù)庫發(fā)展不同步時的中間解決方案.隨著面向?qū)ο髷?shù)據(jù)庫的發(fā)展,其理論逐步完善,最終面向?qū)ο髷?shù)據(jù)庫會取代關(guān)系型數(shù)據(jù)庫.只是這個過程不可一蹴而就,ORM框架在此期間會蓬勃發(fā)展.但隨著面向?qū)ο髷?shù)據(jù)庫的廣泛使用,ORM工具會逐漸消亡.
面向?qū)ο蟪绦蛟O(shè)計語言仍然是現(xiàn)在的主流和趨勢,其具備非常多的優(yōu)勢,如:
面向?qū)ο蟮慕?操作.
多態(tài),繼承
摒棄難以理解的過程.
簡單易用,易理解
但數(shù)據(jù)庫的發(fā)展并未能與程序設(shè)計語言同步.但關(guān)系數(shù)據(jù)庫系統(tǒng)的某些優(yōu)勢也是面向?qū)ο笳Z言目前無法比擬的.比如:
大量數(shù)據(jù)查找,排序
集合數(shù)據(jù)連接操作,映射
數(shù)據(jù)庫訪問的并發(fā),事務(wù)
數(shù)據(jù)庫的約束,隔離
面對這種面向?qū)ο笳Z言與關(guān)系數(shù)據(jù)庫系統(tǒng)并存的局面,采用ORM就變成了一種必然.只要依然采用面向?qū)ο蟪绦蛟O(shè)計語言,底層依然采用關(guān)系型數(shù)據(jù)庫,中間就少不了ORM工具.
采用ORM框架之后,應(yīng)用程序不再直接訪問底層數(shù)據(jù)庫,而是以面向?qū)ο蟮姆绞絹聿僮鞒志没瘜ο?例如創(chuàng)建,修改,刪除等),而ORM框架則將這些面向?qū)ο蟮牟僮鬓D(zhuǎn)化成底層的SQL操作
ORM工具的唯一作用就是:把對持久化對象的保存,修改,刪除等操作,轉(zhuǎn)換成數(shù)據(jù)庫的操作.
程序員可以以面向?qū)ο蟮姆绞讲僮鞒志没瘜ο?而ORM框架則負(fù)責(zé)將相關(guān)操作轉(zhuǎn)換成對應(yīng)的SQL(結(jié)構(gòu)化查詢語言)操作
ORM基本映射關(guān)系
數(shù)據(jù)表映射表.
持久化類被映射到一個數(shù)據(jù)表.程序使用這個持久化來創(chuàng)建實例,修改屬性,刪除實例時,系統(tǒng)自動會轉(zhuǎn)換成為對這個表進(jìn)行CRUD操作
受ORM管理的持久化類(就是一個普通的Java類)對應(yīng)一個數(shù)據(jù)庫,只要程序?qū)@個持久化類進(jìn)行操作,系統(tǒng)就會可以將其轉(zhuǎn)換成對應(yīng)數(shù)據(jù)庫表的操作
數(shù)據(jù)表的行映射對象(即實例)
持久化類會生成很多的實例,每個實例就對應(yīng)數(shù)據(jù)表中的一行記錄.當(dāng)程序在應(yīng)用中修改持久化類的某個實例時,ORM工具將會將其轉(zhuǎn)換成對應(yīng)數(shù)據(jù)表中特定行的操作,每個持久化對象對應(yīng)數(shù)據(jù)表的一行記錄
數(shù)據(jù)表的列(字段)映射對象的屬性
當(dāng)程序修改某個持久化對象的指定屬性時(持久化實例映射到數(shù)據(jù)行),ORM將會將其轉(zhuǎn)換成對應(yīng)數(shù)據(jù)表中指定數(shù)據(jù)行,指定列的操作
可見,在ORM框架中,持久化對象就是一種媒介,應(yīng)用程序只需操作持久化對象,ORM框架則負(fù)責(zé)將這種操作轉(zhuǎn)換為底層數(shù)據(jù)庫操作
流行的ORM框架:
JPA
Mybatis