浣曡皳“鎸佷箙灞?#8221;
鎸佷箙灞傦紙Persistence Layer錛夛紝鍗充笓娉ㄤ簬瀹炵幇鏁版嵁鎸佷箙鍖栧簲鐢ㄩ鍩熺殑鏌愪釜鐗瑰畾緋葷粺鐨勪竴涓昏緫灞傞潰錛屽皢鏁版嵁浣跨敤鑰呭拰鏁版嵁瀹炰綋鐩稿叧鑱斻?/p>
浣曡皳“瀵硅薄鏁版嵁鏄犲皠錛圤RM錛?#8221;
ORM-Object/Relational Mapper錛屽嵆“瀵硅薄-鍏崇郴鍨嬫暟鎹槧灝勭粍浠?#8221;銆傚浜嶰/R錛屽嵆 Object錛堝璞★級(jí)鍜?Relational錛堝叧緋誨瀷鏁版嵁錛夛紝琛ㄧず蹇呴』鍚屾椂浣跨敤闈㈠悜瀵硅薄鍜屽叧緋誨瀷鏁版嵁榪涜寮鍙戙?/p>
澶囨敞錛氬緩妯¢鍩熶腑鐨?ORM 涓?Object/Role Modeling錛堝璞¤鑹插緩妯★級(jí)銆傚彟澶栬繖閲屾槸“O/R Mapper”鑰岄潪“O/R Mapping”銆傜浉瀵規(guī)潵璁詫紝O/R Mapping 鎻忚堪鐨勬槸涓縐嶈璁℃濇兂鎴栬呭疄鐜版満鍒訛紝鑰?O/R Mapper鎸囦互O/R鍘熺悊璁捐鐨勬寔涔呭寲妗嗘灦錛團(tuán)ramework錛夛紝鍖呮嫭 O/R鏈哄埗榪樻湁 SQL鑷敓鎴愶紝浜嬪姟澶勭悊錛孋ache綆$悊絳夈?/p>
闄や簡 ORM 鎶鏈紝榪樻湁浠ヤ笅鍑犵鎸佷箙鍖栨妧鏈?/p>
涓誨姩鍩熷璞℃ā寮?br>瀹冩槸鍦ㄥ疄鐜頒腑灝佽浜嗗叧緋繪暟鎹ā鍨嬪拰鏁版嵁璁塊棶緇嗚妭鐨勪竴縐嶅艦寮忋傚湪 J2EE 鏋舵瀯涓紝EJB 緇勪歡鍒嗕負(fù)浼?xì)璇?EJB 鍜屽疄浣?EJB銆備細(xì)璇?EJB 閫氬父瀹炵幇涓氬姟閫昏緫錛岃屽疄浣?EJB 琛ㄧず涓氬姟瀹炰綋銆傚疄浣?EJB 鍙堝垎涓轟袱縐嶏細(xì)鐢?EJB 鏈韓綆$悊鎸佷箙鍖栵紝鍗?BMP錛圔ean-Managed Persistence錛夛紱鏈?EJB 瀹瑰櫒綆$悊鎸佷箙鍖栵紝鍗?CMP錛圕ontainer-Managed Persistence錛夈侭M P灝辨槸涓誨姩鍩熷璞℃ā寮忕殑涓涓緥瀛愶紝BMP 琛ㄧず鐢卞疄浣?EJB 鑷韓綆$悊鏁版嵁璁塊棶緇嗚妭銆?br>涓誨姩鍩熷璞℃湰韜綅浜庝笟鍔¢昏緫灞傦紝鍥犳閲囩敤涓誨姩鍩熷璞℃ā寮忔椂錛屾暣涓簲鐢ㄤ粛鐒舵槸涓夊眰搴旂敤緇撴瀯錛屽茍娌℃湁浠庝笟鍔¢昏緫灞傚垎紱誨嚭鐙珛鐨勬寔涔呭寲灞傘?/p>
JDO 妯″紡
Java Data Objects錛圝DO錛夋槸 SUN 鍏徃鍒跺畾鐨勬弿榪板璞℃寔涔呭寲璇箟鐨勬爣鍑咥PI銆備弗鏍肩殑璇達(dá)紝JDO 騫朵笉鏄璞?鍏崇郴鏄犲皠鎺ュ彛錛屽洜涓哄畠鏀寔鎶婂璞℃寔涔呭寲鍒頒換鎰忎竴縐嶅瓨鍌ㄧ郴緇熶腑錛屽寘鎷?鍏崇郴鏁版嵁搴撱侀潰鍚戝璞$殑鏁版嵁搴撱佸熀浜?XML 鐨勬暟鎹簱錛屼互鍙?qiáng)鍏朵粬涓撴湁瀛樺偍绯痪l熴傜敱浜庡叧緋繪暟鎹簱鏄洰鍓嶆渶嫻佽鐨勫瓨鍌ㄧ郴緇燂紝璁稿 JDO 鐨勫疄鐜伴兘鍖呭惈浜嗗璞?鍏崇郴鏄犲皠鏈嶅姟銆?/p>
CMP 妯″紡
鍦?J2EE 鏋舵瀯涓紝CMP錛圕ontainer-Managed Persistence錛夎〃紺虹敱 EJB 瀹瑰櫒鏉ョ鐞嗗疄浣?EJB 鐨勬寔涔呭寲錛孍JB 瀹瑰櫒灝佽浜嗗璞?鍏崇郴鐨勬槧灝勫強(qiáng)鏁版嵁璁塊棶緇嗚妭銆侰MP 鍜?ORM 鐨勭浉浼間箣澶勫湪浜庯紝涓よ呴兘鎻愪緵瀵硅薄-鍏崇郴鏄犲皠鏈嶅姟錛岄兘鎶婂璞℃寔涔呭寲鐨勪換鍔′粠涓氬姟閫昏緫涓垎紱誨嚭鏉ャ傚尯鍒湪浜?CMP 璐熻矗鎸佷箙鍖栧疄浣?EJB 緇勪歡錛岃?ORM 璐熻矗鎸佷箙鍖?POJO錛屽畠鏄櫘閫氱殑鍩轟簬 Java Bean 褰㈠紡鐨勫疄浣撳煙瀵硅薄銆?/p>
涓鑸妸鍩轟簬 Java Bean 褰㈠紡鐨勫疄浣撳煙瀵硅薄縐頒負(fù) POJO錛圥lain Old Java Object錛夛紝鎰忎負(fù)鍙堟櫘閫氬張鍙よ佺殑 Java 瀵硅薄鐨勬剰鎬濄傞殢鐫鍚勭 ORM 鏄犲皠宸ュ叿鐨勬棩瓚嬫垚鐔熷拰嫻佽錛孭OJO鏈夐噸鐜板厜褰╋紝瀹冨拰鍩轟簬 CMP 鐨勫疄浣?EJB 鐩告瘮錛屽嵆綆鍗曞張鍏鋒湁寰堥珮鐨勫彲縐繪鎬э紝鍥犳鑱斿悎浣跨敤 ORM 鏄犲皠宸ュ叿鍜?POJO錛屽凡緇忔垚涓轟竴縐嶈秺鏉ヨ秺鍙楁榪庣殑涓旂敤鏉ュ彇浠?CMP 鐨勬寔涔呭寲鏂規(guī)銆侾OJO 鐨勭己鐐瑰氨鏄棤娉曞仛榪滅▼璋冪敤錛屼笉鏀寔鍒嗗竷寮忚綆椼?/p>
涓轟粈涔堣鍋氭寔涔呭寲鍜孫RM璁捐
鍦ㄧ洰鍓嶇殑浼佷笟搴旂敤緋葷粺璁捐涓紝MVC錛屽嵆 Model錛堟ā鍨嬶級(jí)- View錛堣鍥撅級(jí)- Control錛堟帶鍒訛級(jí)涓轟富瑕佺殑緋葷粺鏋舵瀯妯″紡銆侻VC 涓殑 Model 鍖呭惈浜嗗鏉傜殑涓氬姟閫昏緫鍜屾暟鎹昏緫錛屼互鍙?qiáng)鏁版嵁瀛樺彇鏈哄堄灱堝?JDBC鐨勮繛鎺ャ丼QL鐢熸垚鍜孲tatement鍒涘緩銆佽繕鏈塕esultSet緇撴灉闆嗙殑璇誨彇絳夛級(jí)絳夈傚皢榪欎簺澶嶆潅鐨勪笟鍔¢昏緫鍜屾暟鎹昏緫鍒嗙錛屼互灝嗙郴緇熺殑绱ц﹀悎鍏崇郴杞寲涓烘澗鑰﹀悎鍏崇郴錛堝嵆瑙h﹀悎錛夛紝鏄檷浣庣郴緇熻﹀悎搴﹁揩鍒囪鍋氱殑錛屼篃鏄寔涔呭寲瑕佸仛鐨勫伐浣溿侻VC 妯″紡瀹炵幇浜嗘灦鏋勪笂灝嗚〃鐜板眰錛堝嵆View錛夊拰鏁版嵁澶勭悊灞傦紙鍗矼odel錛夊垎紱葷殑瑙h﹀悎錛岃屾寔涔呭寲鐨勮璁″垯瀹炵幇浜嗘暟鎹鐞嗗眰鍐呴儴鐨勪笟鍔¢昏緫鍜屾暟鎹昏緫鍒嗙鐨勮В鑰﹀悎銆傝?ORM 浣滀負(fù)鎸佷箙鍖栬璁′腑鐨勬渶閲嶈涔熸渶澶嶆潅鐨勬妧鏈紝涔熸槸鐩墠涓氱晫鐑偣鎶鏈?/p>
綆鍗曟潵璇達(dá)紝鎸夐氬父鐨勭郴緇熻璁★紝浣跨敤 JDBC 鎿嶄綔鏁版嵁搴擄紝涓氬姟澶勭悊閫昏緫鍜屾暟鎹瓨鍙栭昏緫鏄販鏉傚湪涓璧風(fēng)殑銆?br>涓鑸熀鏈兘鏄涓嬪嚑涓楠わ細(xì)
1銆佸緩绔嬫暟鎹簱榪炴帴錛岃幏寰?Connection 瀵硅薄銆?br>2銆佹牴鎹敤鎴風(fēng)殑杈撳叆緇勮鏌ヨ SQL 璇彞銆?br>3銆佹牴鎹?SQL 璇彞寤虹珛 Statement 瀵硅薄 鎴栬?PreparedStatement 瀵硅薄銆?br>4銆佺敤 Connection 瀵硅薄鎵ц SQL璇彞錛岃幏寰楃粨鏋滈泦 ResultSet 瀵硅薄銆?br>5銆佺劧鍚庝竴鏉′竴鏉¤鍙栫粨鏋滈泦 ResultSet 瀵硅薄涓殑鏁版嵁銆?br>6銆佹牴鎹鍙栧埌鐨勬暟鎹紝鎸夌壒瀹氱殑涓氬姟閫昏緫榪涜璁$畻銆?br>7銆佹牴鎹綆楀緱鍒扮殑緇撴灉鍐嶇粍瑁呮洿鏂?SQL 璇彞銆?br>8銆佸啀浣跨敤 Connection 瀵硅薄鎵ц鏇存柊 SQL 璇彞錛屼互鏇存柊鏁版嵁搴撲腑鐨勬暟鎹?br>7銆佹渶鍚庝緷嬈″叧闂悇涓?Statement 瀵硅薄鍜?Connection 瀵硅薄銆?/p>
鐢變笂鍙湅鍑轟唬鐮侀昏緫闈炲父澶嶆潅錛岃繖榪樹笉鍖呮嫭鏌愭潯璇彞鎵ц澶辮觸鐨勫鐞嗛昏緫銆傚叾涓殑涓氬姟澶勭悊閫昏緫鍜屾暟鎹瓨鍙栭昏緫瀹屽叏娣鋒潅鍦ㄤ竴鍧椼傝屼竴涓畬鏁寸殑緋葷粺瑕佸寘鍚垚鍗冧笂涓囦釜榪欐牱閲嶅鐨勮屽張娣鋒潅鐨勫鐞嗚繃紼嬶紝鍋囧瑕佸鍏朵腑鏌愪簺涓氬姟閫昏緫鎴栬呬竴浜涚浉鍏寵仈鐨勪笟鍔℃祦紼嬪仛淇敼錛岃鏀瑰姩鐨勪唬鐮侀噺灝嗕笉鍙兂璞°傚彟涓鏂歸潰錛屽亣濡傝鎹㈡暟鎹簱浜у搧鎴栬呰繍琛岀幆澧冧篃鍙兘鏄釜涓嶅彲鑳藉畬鎴愮殑浠誨姟銆傝岀敤鎴風(fēng)殑榪愯鐜鍜岃姹傚嵈鍗冨樊涓囧埆錛屾垜浠笉鍙兘涓烘瘡涓涓敤鎴鋒瘡涓縐嶈繍琛岀幆澧冭璁′竴濂椾竴鏍風(fēng)殑緋葷粺銆?br>鎵浠ュ氨瑕佸皢涓鏍風(fēng)殑澶勭悊浠g爜鍗充笟鍔¢昏緫鍜屽彲鑳戒笉涓鏍風(fēng)殑澶勭悊鍗蟲暟鎹瓨鍙栭昏緫鍒嗙寮鏉ワ紝鍙︿竴鏂歸潰錛屽叧緋誨瀷鏁版嵁搴撲腑鐨勬暟鎹熀鏈兘鏄互涓琛岃鐨勬暟鎹繘琛屽瓨鍙栫殑錛岃岀▼搴忚繍琛屽嵈鏄竴涓釜瀵硅薄榪涜澶勭悊錛岃岀洰鍓嶅ぇ閮ㄥ垎鏁版嵁搴撻┍鍔ㄦ妧鏈紙濡侫DO.NET銆丣DBC銆丱DBC絳夌瓑錛夊潎鏄互琛岄泦鐨勭粨鏋滈泦涓鏉℃潯榪涜澶勭悊鐨勩傛墍浠ヤ負(fù)瑙e喅榪欎竴鍥伴毦錛屽氨鍑虹幇 ORM 榪欎竴涓璞″拰鏁版嵁涔嬮棿鏄犲皠鎶鏈?/p>
涓句緥鏉ヨ錛屾瘮濡傝瀹屾垚涓涓喘鐗╂墦鎶樹績閿鐨勭▼搴忥紝鐢?ORM 鎬濇兂灝嗗涓嬪疄鐜幫紙寮曡嚜銆婃繁鍏ユ祬鍑篐ibernate銆嬶級(jí)錛?br>涓氬姟閫昏緫濡備笅錛?br>public Double calcAmount(String customerid, double amount)
{
// 鏍規(guī)嵁瀹㈡埛ID鑾峰緱瀹㈡埛璁板綍
Customer customer = CustomerManager.getCustomer(custmerid);
// 鏍規(guī)嵁瀹㈡埛絳夌駭鑾峰緱鎵撴姌瑙勫垯
Promotion promotion = PromotionManager.getPromotion(customer.getLevel());
// 绱Н瀹㈡埛鎬繪秷璐歸錛屽茍淇濆瓨绱緇撴灉
customer.setSumAmount(customer.getSumAmount().add(amount);
CustomerManager.save(customer);
// 榪斿洖鎵撴姌鍚庣殑閲戦
return amount.multiply(protomtion.getRatio());
}
榪欐牱浠g爜灝遍潪甯告竻鏅頒簡錛岃屼笖涓庢暟鎹瓨鍙栭昏緫瀹屽叏鍒嗙銆傝璁′笟鍔¢昏緫浠g爜鐨勬椂鍊欏畬鍏ㄤ笉闇瑕佽冭檻鏁版嵁搴揓DBC鐨勯偅浜涘崈綃囦竴寰嬬殑鎿嶄綔錛岃屽皢瀹冧氦緇?CustomerManager 鍜?PromotionManager 涓や釜綾誨幓瀹屾垚銆傝繖灝辨槸涓涓畝鍗曠殑 ORM 璁捐錛屽疄闄呯殑 ORM 瀹炵幇妗嗘灦姣旇繖涓澶嶆潅鐨勫銆?/p>
鐩墠鏈夊摢浜涙祦琛岀殑 ORM 浜у搧
鐩墠浼楀鍘傚晢鍜屽紑婧愮ぞ鍖洪兘鎻愪緵浜嗘寔涔呭眰妗嗘灦鐨勫疄鐜幫紝甯歌鐨勬湁
Apache OJB 錛?a >http://db.apache.org/ojb/錛?br>Cayenne 錛?a >http://objectstyle.org/cayenne/錛?br>Jaxor 錛?a >http://jaxor.sourceforge.net錛?br>Hibernate 錛?a >http://www.hibernate.org錛?br>iBatis 錛?a >http://www.ibatis.com錛?br>jRelationalFramework 錛?a >http://ijf.sourceforge.net錛?br>mirage 錛?a >http://itor.cq2.org/en/oss/mirage/toon錛?br>SMYLE 錛?a >http://www.drjava.de/smyle錛?br>TopLink 錛?a >http://otn.oracle.com/products/ias/toplink/index.html錛?br>鍏朵腑 TopLink 鏄?Oracle 鐨勫晢涓氫駭鍝侊紝鍏朵粬鍧囦負(fù)寮婧愰」鐩?/p>
鍏朵腑 Hibernate 鐨勮交閲忕駭 ORM 妯″瀷閫愭紜珛浜嗗湪 Java ORM 鏋舵瀯涓瀵煎湴浣嶏紝鐢氳嚦鍙栦唬澶嶆潅鑰屽張綣佺悙鐨?EJB 妯″瀷鑰屾垚涓轟簨瀹炰笂鐨?Java ORM 宸ヤ笟鏍囧噯銆傝屼笖鍏朵腑鐨勮澶氳璁″潎琚?J2EE 鏍囧噯緇勭粐鍚哥撼鑰屾垚涓烘渶鏂?EJB 3.0 瑙勮寖鐨勬爣鍑嗭紝榪欎篃鏄紑婧愰」鐩獎(jiǎng)鍝嶅伐涓氶鍩熸爣鍑嗙殑鏈夊姏瑙佽瘉銆?/p>