ORM的全稱是:Object Mapping,即對象/關系數據庫映射.
當使用一種面向對象的編程語言來進行應用開發時,從項目一開始就采用的是面向對象分析,面向對象設計,面向對象編程,但到了持久層數據庫訪問時,又必須重返關系數據庫的訪問方式,這是一種非常糟糕的感覺.于是人們需要一種工具,它可以把關系型數據庫包裝成面向對象的模型.它就是ORM.
ORM框架是面向對象程序設計語言與關系數據庫發展不同步時的中間解決方案.隨著面向對象數據庫的發展,其理論逐步完善,最終面向對象數據庫會取代關系型數據庫.只是這個過程不可一蹴而就,ORM框架在此期間會蓬勃發展.但隨著面向對象數據庫的廣泛使用,ORM工具會逐漸消亡.
面向對象程序設計語言仍然是現在的主流和趨勢,其具備非常多的優勢,如:
面向對象的建模,操作.
多態,繼承
摒棄難以理解的過程.
簡單易用,易理解
但數據庫的發展并未能與程序設計語言同步.但關系數據庫系統的某些優勢也是面向對象語言目前無法比擬的.比如:
大量數據查找,排序
集合數據連接操作,映射
數據庫訪問的并發,事務
數據庫的約束,隔離
面對這種面向對象語言與關系數據庫系統并存的局面,采用ORM就變成了一種必然.只要依然采用面向對象程序設計語言,底層依然采用關系型數據庫,中間就少不了ORM工具.
采用ORM框架之后,應用程序不再直接訪問底層數據庫,而是以面向對象的方式來操作持久化對象(例如創建,修改,刪除等),而ORM框架則將這些面向對象的操作轉化成底層的SQL操作
ORM工具的唯一作用就是:把對持久化對象的保存,修改,刪除等操作,轉換成數據庫的操作.
程序員可以以面向對象的方式操作持久化對象,而ORM框架則負責將相關操作轉換成對應的SQL(結構化查詢語言)操作
ORM基本映射關系
數據表映射表.
持久化類被映射到一個數據表.程序使用這個持久化來創建實例,修改屬性,刪除實例時,系統自動會轉換成為對這個表進行CRUD操作
受ORM管理的持久化類(就是一個普通的Java類)對應一個數據庫,只要程序對這個持久化類進行操作,系統就會可以將其轉換成對應數據庫表的操作
數據表的行映射對象(即實例)
持久化類會生成很多的實例,每個實例就對應數據表中的一行記錄.當程序在應用中修改持久化類的某個實例時,ORM工具將會將其轉換成對應數據表中特定行的操作,每個持久化對象對應數據表的一行記錄
數據表的列(字段)映射對象的屬性
當程序修改某個持久化對象的指定屬性時(持久化實例映射到數據行),ORM將會將其轉換成對應數據表中指定數據行,指定列的操作
可見,在ORM框架中,持久化對象就是一種媒介,應用程序只需操作持久化對象,ORM框架則負責將這種操作轉換為底層數據庫操作
流行的ORM框架:
JPA
Mybatis