java orm是什么,讓我們一起了解一下?
對(duì)象關(guān)系映射(Object-Relational Mapping,簡稱ORM)是一種為了解決程序的面向?qū)ο竽P团c數(shù)據(jù)庫的關(guān)系模型互不匹配問題的技術(shù);簡單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù)(在Java中可以用XML或者是注解),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中或者將關(guān)系數(shù)據(jù)庫表中的行轉(zhuǎn)換成Java對(duì)象,其本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。
ORM的優(yōu)缺點(diǎn)有哪些?
優(yōu)勢:
第一:隱藏了數(shù)據(jù)訪問細(xì)節(jié),“封閉”的通用數(shù)據(jù)庫交互,ORM的核心。他使得我們的通用數(shù)據(jù)庫交互變得簡單易行,并且完全不用考慮該死的SQL語句。快速開發(fā),由此而來。
第二:ORM使我們構(gòu)造固化數(shù)據(jù)結(jié)構(gòu)變得簡單易行。在ORM年表的史前時(shí)代,我們需要將我們的對(duì)象模型轉(zhuǎn)化為一條一條的SQL語句,通過直連或是DB helper在關(guān)系數(shù)據(jù)庫構(gòu)造我們的數(shù)據(jù)庫體系。而現(xiàn)在,基本上所有的ORM框架都提供了通過對(duì)象模型構(gòu)造關(guān)系數(shù)據(jù)庫結(jié)構(gòu)的功能。
缺點(diǎn):
第一:無可避免的,自動(dòng)化意味著映射和關(guān)聯(lián)管理,代價(jià)是犧牲性能(早期,這是所有不喜歡ORM人的共同點(diǎn))?,F(xiàn)在的各種ORM框架都在嘗試使用各種方法來減輕這塊(LazyLoad,Cache),效果還是很顯著的。
第二:面向?qū)ο蟮牟樵冋Z言(X-QL)作為一種數(shù)據(jù)庫與對(duì)象之間的過渡,雖然隱藏了數(shù)據(jù)層面的業(yè)務(wù)抽象,但并不能完全的屏蔽掉數(shù)據(jù)庫層的設(shè)計(jì),并且無疑將增加學(xué)習(xí)成本。
第三:對(duì)于復(fù)雜查詢,ORM仍然力不從心。雖然可以實(shí)現(xiàn),但是不值的。視圖可以解決大部分calculated column,case ,group,having,order by, exists,但是查詢條件(a and b and not c and (d or d))。
示例說明如下:
public?class?M_People {undefined string?_Pl_ID; [DataFieldAttribute("Pl_ID",?"Int")] public?string?Pl_ID {undefined get?{?return?_Pl_ID;?} set?{?_Pl_ID?=?value;?} } int?_PL_Age; [DataFieldAttribute("PL_Age",?"Int")] public?int?PL_Age {undefined get?{?return?_PL_Age;?} set?{?_PL_Age?=?value;?} } string?_Pl_Sex; [DataFieldAttribute("Pl_Sex",?"nvarchar")] public?string?Pl_Sex {undefined get?{?return?_Pl_Sex;?} set?{?_Pl_Sex?=?value;?} } string?_Pl_LoginName; [DataFieldAttribute("Pl_LoginName",?"nvarchar")] public?string?Pl_LoginName {undefined get?{?return?_Pl_LoginName;?} set?{?_Pl_LoginName?=?value;?} } string?_Pl_TrueName; [DataFieldAttribute("Pl_TrueName",?"nvarchar")] public?string?Pl_TrueName {undefined get?{?return?_Pl_TrueName;?} set?{?_Pl_TrueName?=?value;?} } string?_PL_Pwd; [DataFieldAttribute("PL_Pwd",?"nvarchar")] public?string?PL_Pwd {undefined get?{?return?_PL_Pwd;?} set?{?_PL_Pwd?=?value;?} } }
以上就是小編今天的分享了,希望可以幫助到大家。