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