銆銆澶т綋涓婏紝瀵逛簬HIBERNATE鎬ц兘璋冧紭鐨勪富瑕佽冭檻鐐瑰涓?
銆銆脴 鏁版嵁搴撹璁¤皟鏁?/p>
銆銆脴 HQL浼樺寲
銆銆脴 API鐨勬紜嬌鐢?濡傛牴鎹笉鍚岀殑涓氬姟綾誨瀷閫夌敤涓嶅悓鐨勯泦鍚堝強鏌ヨAPI)
銆銆脴 涓婚厤緗弬鏁?鏃ュ織錛屾煡璇㈢紦瀛橈紝fetch_size, batch_size絳?
銆銆脴 鏄犲皠鏂囦歡浼樺寲(ID鐢熸垚絳栫暐錛屼簩綰х紦瀛橈紝寤惰繜鍔犺澆錛屽叧鑱斾紭鍖?
銆銆脴 涓綰х紦瀛樼殑綆$悊
銆銆脴 閽堝浜岀駭緙撳瓨錛岃繕鏈夎澶氱壒鏈夌殑絳栫暐
銆銆脴 浜嬪姟鎺у埗絳栫暐銆?/p>
銆銆1銆?鏁版嵁搴撹璁?/p>
銆銆a) 闄嶄綆鍏寵仈鐨勫鏉傛?/p>
銆銆b) 灝介噺涓嶄嬌鐢ㄨ仈鍚堜富閿?/p>
銆銆c) ID鐨勭敓鎴愭満鍒訛紝涓嶅悓鐨勬暟鎹簱鎵鎻愪緵鐨勬満鍒跺茍涓嶅畬鍏ㄤ竴鏍?/p>
銆銆d) 閫傚綋鐨勫啑浣欐暟鎹紝涓嶈繃鍒嗚拷姹傞珮鑼冨紡
銆銆2銆?HQL浼樺寲
銆銆HQL濡傛灉鎶涘紑瀹冨悓HIBERNATE鏈韓涓浜涚紦瀛樻満鍒剁殑鍏寵仈錛孒QL鐨勪紭鍖栨妧宸у悓鏅氱殑SQL浼樺寲鎶宸т竴鏍鳳紝鍙互寰堝鏄撳湪緗戜笂鎵懼埌涓浜涚粡楠屼箣璋堛?/p>
銆銆3銆?涓婚厤緗?/p>
銆銆a) 鏌ヨ緙撳瓨錛屽悓涓嬮潰璁茬殑緙撳瓨涓嶅お涓鏍鳳紝瀹冩槸閽堝HQL璇彞鐨勭紦瀛橈紝鍗沖畬鍏ㄤ竴鏍風(fēng)殑璇彞鍐嶆鎵ц鏃跺彲浠ュ埄鐢ㄧ紦瀛樻暟鎹備絾鏄紝鏌ヨ緙撳瓨鍦ㄤ竴涓氦鏄撶郴緇?鏁版嵁鍙樻洿棰戠箒錛屾煡璇㈡潯浠剁浉鍚岀殑鏈虹巼騫朵笉澶?涓彲鑳戒細(xì)璧峰弽浣滅敤:瀹冧細(xì)鐧界櫧鑰楄垂澶ч噺鐨勭郴緇熻祫婧愪絾鍗撮毦浠ユ淳涓婄敤鍦恒?/p>
銆銆b) fetch_size錛屽悓JDBC鐨勭浉鍏沖弬鏁頒綔鐢ㄧ被浼鹼紝鍙傛暟騫朵笉鏄秺澶ц秺濂斤紝鑰屽簲鏍規(guī)嵁涓氬姟鐗瑰緛鍘昏緗?/p>
銆銆c) batch_size鍚屼笂銆?/p>
銆銆d) 鐢熶駭緋葷粺涓紝鍒囪瑕佸叧鎺塖QL璇彞鎵撳嵃銆?/p>
銆銆4銆?緙撳瓨
銆銆a) 鏁版嵁搴撶駭緙撳瓨:榪欑駭緙撳瓨鏄渶楂樻晥鍜屽畨鍏ㄧ殑錛屼絾涓嶅悓鐨勬暟鎹簱鍙鐞嗙殑灞傛騫朵笉涓鏍鳳紝姣斿錛屽湪ORACLE涓紝鍙互鍦ㄥ緩琛ㄦ椂鎸囧畾灝嗘暣涓〃緗簬緙撳瓨褰撲腑銆?/p>
銆銆b) SESSION緙撳瓨:鍦ㄤ竴涓狧IBERNATE SESSION鏈夋晥錛岃繖綰х紦瀛樼殑鍙共棰勬т笉寮猴紝澶у浜嶩IBERNATE鑷姩綆$悊錛屼絾瀹冩彁渚涙竻闄ょ紦瀛樼殑鏂規(guī)硶錛岃繖鍦ㄥぇ鎵歸噺澧炲姞/鏇存柊鎿嶄綔鏄湁鏁堢殑銆傛瘮濡傦紝鍚屾椂澧炲姞鍗佷竾鏉¤褰曪紝鎸夊父瑙勬柟寮忚繘琛岋紝寰堝彲鑳戒細(xì)鍙戠幇OutofMemeroy鐨勫紓甯革紝榪欐椂鍙兘闇瑕佹墜鍔ㄦ竻闄よ繖涓綰х紦瀛?Session.evict浠ュ強Session.clear
銆銆c) 搴旂敤緙撳瓨:鍦ㄤ竴涓猄ESSIONFACTORY涓湁鏁堬紝鍥犳涔熸槸浼樺寲鐨勯噸涓箣閲嶏紝鍥犳錛屽悇綾葷瓥鐣ヤ篃鑰冭檻鐨勮緝澶氾紝鍦ㄥ皢鏁版嵁鏀懼叆榪欎竴綰х紦瀛樹箣鍓嶏紝闇瑕佽冭檻涓浜涘墠鎻愭潯浠?
銆銆i. 鏁版嵁涓嶄細(xì)琚涓夋柟淇敼(姣斿錛屾槸鍚︽湁鍙︿竴涓簲鐢ㄤ篃鍦ㄤ慨鏀硅繖浜涙暟鎹?)
銆銆ii. 鏁版嵁涓嶄細(xì)澶ぇ
銆銆iii. 鏁版嵁涓嶄細(xì)棰戠箒鏇存柊(鍚﹀垯浣跨敤CACHE鍙兘閫傚緱鍏跺弽)
銆銆iv. 鏁版嵁浼?xì)琚绻佹煡璇?/p>
銆銆v. 鏁版嵁涓嶆槸鍏抽敭鏁版嵁(濡傛秹鍙婇挶錛屽畨鍏ㄧ瓑鏂歸潰鐨勯棶棰?銆?/p>
銆銆緙撳瓨鏈夊嚑縐嶅艦寮忥紝鍙互鍦ㄦ槧灝勬枃浠朵腑閰嶇疆:read-only(鍙錛岄傜敤浜庡緢灝戝彉鏇寸殑闈欐佹暟鎹?鍘嗗彶鏁版嵁)錛宯onstrict-read-write錛宺ead-write(姣旇緝鏅亶鐨勫艦寮忥紝鏁堢巼涓鑸?錛宼ransactional(JTA涓紝涓旀敮鎸佺殑緙撳瓨浜у搧杈冨皯)
銆銆d) 鍒嗗竷寮忕紦瀛?鍚宑)鐨勯厤緗竴鏍鳳紝鍙槸緙撳瓨浜у搧鐨勯夌敤涓嶅悓錛屽湪鐩墠鐨凥IBERNATE涓彲渚涢夋嫨鐨勪笉澶氾紝oscache, jboss cache錛岀洰鍓嶇殑澶у鏁伴」鐩紝瀵瑰畠浠殑鐢ㄤ簬闆嗙兢鐨勪嬌鐢?鐗瑰埆鏄叧閿氦鏄撶郴緇?閮芥寔淇濆畧鎬佸害銆傚湪闆嗙兢鐜涓紝鍙埄鐢ㄦ暟鎹簱綰х殑緙撳瓨鏄渶瀹夊叏鐨勩?/p>
銆銆5銆?寤惰繜鍔犺澆
銆銆a) 瀹炰綋寤惰繜鍔犺澆:閫氳繃浣跨敤鍔ㄦ佷唬鐞嗗疄鐜?/p>
銆銆b) 闆嗗悎寤惰繜鍔犺澆:閫氳繃瀹炵幇鑷湁鐨凷ET/LIST錛孒IBERNATE鎻愪緵浜嗚繖鏂歸潰鐨勬敮鎸?/p>
銆銆c) 灞炴у歡榪熷姞杞?
銆銆6銆?鏂規(guī)硶閫夌敤
銆銆a) 瀹屾垚鍚屾牱涓浠朵簨錛孒IBERNATE鎻愪緵浜嗗彲渚涢夋嫨鐨勪竴浜涙柟寮忥紝浣嗗叿浣撲嬌鐢ㄤ粈涔堟柟寮忥紝鍙兘鐢ㄦц兘/浠g爜閮戒細(xì)鏈夊獎鍝嶃傛樉紺猴紝涓嬈¤繑鍥炲崄涓囨潯璁板綍(List/Set/Bag/Map絳?榪涜澶勭悊錛屽緢鍙兘瀵艱嚧鍐呭瓨涓嶅鐨勯棶棰橈紝鑰屽鏋滅敤鍩轟簬娓告爣(ScrollableResults)鎴朓terator鐨勭粨鏋滈泦錛屽垯涓嶅瓨鍦ㄨ繖鏍風(fēng)殑闂銆?/p>
銆銆b) Session鐨刲oad/get鏂規(guī)硶錛屽墠鑰呬細(xì)浣跨敤浜岀駭緙撳瓨錛岃屽悗鑰呭垯涓嶄嬌鐢ㄣ?/p>
銆銆c) Query鍜宭ist/iterator錛屽鏋滃幓浠旂粏鐮旂┒涓涓嬪畠浠紝浣犲彲鑳戒細(xì)鍙戠幇寰堝鏈夋剰鎬濈殑鎯呭喌錛屼簩鑰呬富瑕佸尯鍒?濡傛灉浣跨敤浜哠pring錛屽湪HibernateTemplate涓搴攆ind,iterator鏂規(guī)硶):
銆銆i. list鍙兘鍒╃敤鏌ヨ緙撳瓨(浣嗗湪浜ゆ槗緋葷粺涓煡璇㈢紦瀛樹綔鐢ㄤ笉澶?錛屾棤娉曞埄鐢ㄤ簩綰х紦瀛樹腑鐨勫崟涓疄浣擄紝浣唋ist鏌ュ嚭鐨勫璞′細(xì)鍐欏叆浜岀駭緙撳瓨錛屼絾瀹冧竴鑸彧鐢熸垚杈冨皯鐨勬墽琛孲QL璇彞錛屽緢澶氭儏鍐靛氨鏄竴鏉?鏃犲叧鑱?銆?/p>
銆銆ii. iterator鍒欏彲浠ュ埄鐢ㄤ簩綰х紦瀛橈紝瀵逛簬涓鏉℃煡璇㈣鍙ワ紝瀹冧細(xì)鍏堜粠鏁版嵁搴撲腑鎵懼嚭鎵鏈夌鍚堟潯浠剁殑璁板綍鐨処D錛屽啀閫氳繃ID鍘葷紦瀛樻壘錛屽浜庣紦瀛樹腑娌℃湁鐨勮褰曪紝鍐嶆瀯閫犺鍙ヤ粠鏁版嵁搴撲腑鏌ュ嚭錛屽洜姝ゅ緢瀹規(guī)槗鐭ラ亾錛屽鏋滅紦瀛樹腑娌℃湁浠諱綍絎﹀悎鏉′歡鐨勮褰曪紝浣跨敤iterator浼?xì)漶旂敓N+1鏉QL璇彞(N涓虹鍚堟潯浠剁殑璁板綍鏁?
銆銆iii. 閫氳繃iterator錛岄厤鍚堢紦瀛樼鐞咥PI錛屽湪嫻烽噺鏁版嵁鏌ヨ涓彲浠ュ緢濂界殑瑙e喅鍐呭瓨闂錛屽:
銆銆while(it.hasNext()){
銆銆YouObject object = (YouObject)it.next();
銆銆session.evict(youObject);
銆銆sessionFactory.evice(YouObject.class, youObject.getId());
銆銆}
銆銆濡傛灉鐢╨ist鏂規(guī)硶錛屽緢鍙兘灝卞嚭OutofMemory閿欒浜嗐?/p>
銆銆iv. 閫氳繃涓婇潰鐨勮鏄庯紝鎴戞兂浣犲簲璇ョ煡閬撳浣曞幓浣跨敤榪欎袱涓柟娉曚簡銆?/p>
銆銆7銆?闆嗗悎鐨勯夌敤
銆銆鍦℉IBERNATE 3.1鏂囨。鐨勨?9.5. Understanding Collection performance鈥濅腑鏈夎緇嗙殑璇存槑銆?/p>
銆銆8銆?浜嬪姟鎺у埗
銆銆浜嬪姟鏂歸潰瀵規(guī)ц兘鏈夊獎鍝嶇殑涓昏鍖呮嫭:浜嬪姟鏂瑰紡鐨勯夌敤錛屼簨鍔¢殧紱葷駭鍒互鍙婇攣鐨勯夌敤
銆銆a) 浜嬪姟鏂瑰紡閫夌敤:濡傛灉涓嶆秹鍙婂涓簨鍔$鐞嗗櫒浜嬪姟鐨勮瘽錛屼笉闇瑕佷嬌鐢↗TA錛屽彧鏈塉DBC鐨勪簨鍔℃帶鍒跺氨鍙互銆?/p>
銆銆b) 浜嬪姟闅旂綰у埆:鍙傝鏍囧噯鐨凷QL浜嬪姟闅旂綰у埆
銆銆c) 閿佺殑閫夌敤:鎮(zhèn)茶閿?涓鑸敱鍏蜂綋鐨勪簨鍔$鐞嗗櫒瀹炵幇)錛屽浜庨暱浜嬪姟鏁堢巼浣庯紝浣嗗畨鍏ㄣ備箰瑙傞攣(涓鑸湪搴旂敤綰у埆瀹炵幇)錛屽鍦℉IBERNATE涓彲浠ュ畾涔塚ERSION瀛楁錛屾樉鐒訛紝濡傛灉鏈夊涓簲鐢ㄦ搷浣滄暟鎹紝涓旇繖浜涘簲鐢ㄤ笉鏄敤鍚屼竴縐嶄箰瑙傞攣鏈哄埗錛屽垯涔愯閿佷細(xì)澶辨晥銆傚洜姝わ紝閽堝涓嶅悓鐨勬暟鎹簲鏈変笉鍚岀殑絳栫暐錛屽悓鍓嶉潰璁稿鎯呭喌涓鏍鳳紝寰堝鏃跺欐垜浠槸鍦ㄦ晥鐜囦笌瀹夊叏/鍑嗙‘鎬т笂鎵句竴涓鉤琛$偣錛屾棤璁哄浣曪紝浼樺寲閮戒笉鏄竴涓函鎶鏈殑闂錛屼綘搴旇瀵逛綘鐨勫簲鐢ㄥ拰涓氬姟鐗瑰緛鏈夎凍澶熺殑浜嗚В銆?/p>
銆銆9銆?鎵歸噺鎿嶄綔
銆銆鍗充嬌鏄嬌鐢↗DBC錛屽湪榪涜澶ф壒鏁版嵁鏇存柊鏃訛紝BATCH涓庝笉浣跨敤BATCH鏈夋晥鐜囦笂涔熸湁寰堝ぇ鐨勫樊鍒傛垜浠彲浠ラ氳繃璁劇疆batch_size鏉ヨ鍏舵敮鎸佹壒閲忔搷浣溿?/p>
銆銆涓句釜渚嬪瓙錛岃鎵歸噺鍒犻櫎鏌愯〃涓殑瀵硅薄錛屽鈥渄elete Account鈥濓紝鎵撳嚭鏉ョ殑璇彞錛屼細(xì)鍙戠幇HIBERNATE鎵懼嚭浜嗘墍鏈堿CCOUNT鐨処D錛屽啀榪涜鍒犻櫎錛岃繖涓昏鏄負(fù)浜嗙淮鎶や簩綰х紦瀛橈紝榪欐牱鏁堢巼鑲畾楂樹笉浜嗭紝鍦ㄥ悗緇殑鐗堟湰涓鍔犱簡bulk delete/update錛屼絾榪欎篃鏃犳硶瑙e喅緙撳瓨鐨勭淮鎶ら棶棰樸備篃灝辨槸璇達(dá)紝鐢變簬鏈変簡浜岀駭緙撳瓨鐨勭淮鎶ら棶棰橈紝HIBERNATE鐨勬壒閲忔搷浣滄晥鐜囧茍涓嶅敖濡備漢鎰?
銆銆浠庡墠闈㈣澶氳鐐瑰彲浠ョ湅鍑猴紝寰堝鏃跺欐垜浠槸鍦ㄦ晥鐜囦笌瀹夊叏/鍑嗙‘鎬т笂鎵句竴涓鉤琛$偣錛屾棤璁哄浣曪紝浼樺寲閮戒笉鏄竴涓函鎶鏈殑闂錛屼綘搴旇瀵逛綘鐨勫簲鐢ㄥ拰涓氬姟鐗瑰緛鏈夎凍澶熺殑浜嗚В錛屼竴鑸殑錛屼紭鍖栨柟妗堝簲鍦ㄦ灦鏋勮璁℃湡灝卞熀鏈‘瀹氾紝鍚﹀垯鍙兘瀵艱嚧娌″繀瑕佺殑榪斿伐錛岃嚧浣塊」鐩歡鏈燂紝鑰屼綔涓烘灦鏋勫笀鍜岄」鐩粡鐞嗭紝榪樿闈㈠寮鍙戜漢鍛樺彲鑳界殑鎶辨紝蹇呯珶錛屾垜浠鐢ㄦ埛闇姹傛洿鏀圭殑鎺у埗鍔涗笉澶э紝浣嗘妧鏈?鏋舵瀯椋庨櫓鏄簲璇ュ湪鍒濇湡鎰忚瘑鍒板茍鍒跺畾濂界浉鍏崇殑瀵圭瓥銆?/p>
銆銆榪樻湁涓鐐硅娉ㄦ剰錛屽簲鐢ㄥ眰鐨勭紦瀛樺彧鏄敠涓婃坊鑺憋紝姘歌繙涓嶈鎶婂畠褰撴晳鍛界ɑ鑽夛紝搴旂敤鐨勬牴鍩?鏁版嵁搴撹璁★紝綆楁硶錛岄珮鏁堢殑鎿嶄綔璇彞錛屾伆褰揂PI鐨勯夋嫨絳?鎵嶆槸鏈閲嶈鐨勩?/p>
姣忓仛涓嬈℃暟鎹搷浣滐紝灝辨洿鏂頒竴嬈ession錛岃繖鏍峰彲浠ヤ繚璇佹瘡嬈℃暟鎹搷浣滈兘鎴愬姛錛屽惁鍒欏氨璁㏒pring鍘繪帶鍒跺畠roll back鍚с?br />
鏈鍚庯紝璁板緱鍏抽棴Session銆?br />
鑷充簬澶勭悊閫熷害鍛紝涓嶄細(xì)鎱㈠埌鍝効鍘葷殑錛屽凡緇忚瘯楠岃繃浜嗐? - )
榪樼瓑浠涔堬紝璧跺揩璇曡瘯鍚э紒
聽聽聽聽聽聽 濡傚浘 1 銆?/span> Hibernate 璁捐浜?/span> CriteriaSpecification 浣滀負(fù) Criteria 鐨勯《綰ф帴鍙o紝鍏朵笅闈㈡彁渚涗簡 Criteria 鍜?/span> DetachedCriteria 銆?/span>
Criteria 鍜?/span> DetachedCriteria 鐨勪富瑕佸尯鍒湪浜庡垱寤虹殑褰㈠紡涓嶄竴鏍鳳紝 Criteria 鏄湪綰跨殑錛屾墍浠ュ畠鏄敱 Hibernate Session 榪涜鍒涘緩鐨勶紱鑰?/span> DetachedCriteria 鏄綰跨殑錛屽垱寤烘椂鏃犻渶 Session 錛?/span> DetachedCriteria 鎻愪緵浜?/span> 4 涓潤鎬佹柟娉?/span> forClass(Class) 鎴?/span> forEntityName(Name) 榪涜 DetachedCriteria 瀹炰緥鐨勫垱寤恒?/span> Spring 鐨勬鏋舵彁渚涗簡
getHibernateTemplate().findByCriteria(detachedCriteria) 鏂規(guī)硶鍙互寰堟柟渚垮湴鏍規(guī)嵁
DetachedCriteria 鏉ヨ繑鍥炴煡璇㈢粨鏋溿?/span>
濡傚浘 1 錛?/span> Criteria 鍜?/span> DetachedCriteria 鍧囧彲浣跨敤 Criterion 鍜?/span> Projection 璁劇疆鏌ヨ鏉′歡銆傚彲浠ヨ緗?/span> FetchMode( 鑱斿悎鏌ヨ鎶撳彇鐨勬ā寮?/span> ) 錛岃緗帓搴忔柟寮忋傚浜?/span> Criteria 榪樺彲浠ヨ緗?/span> FlushModel 錛堝啿鍒?/span> Session 鐨勬柟寮忥級鍜?/span> LockMode 錛堟暟鎹簱閿佹ā寮忥級銆?/span>
涓嬮潰灝卞 Criterion 鍜?/span> Projection 榪涜璇︾粏璇存槑銆?/span>
聽聽聽聽聽聽
鍥?/span> 1
聽聽聽聽聽聽 Criterion 鏄?/span> Criteria 鐨勬煡璇㈡潯浠躲?/span>
Criteria 鎻愪緵浜?/span> add(Criterion criterion) 鏂規(guī)硶鏉ユ坊鍔犳煡璇㈡潯浠躲傚浘 2 鏄?/span> Criterion 鐨勭粨鏋勫浘銆?/span> Criterion 鎺ュ彛鐨勪富瑕佸疄鐜板寘鎷細(xì) Example 銆?/span> Junction 鍜?/span> SimpleExpression 銆傝?/span> Junction 鐨勫疄闄呬嬌鐢ㄦ槸瀹冪殑涓や釜瀛愮被 conjunction 鍜?/span> disjunction 錛屽垎鍒槸浣跨敤 AND 鍜?/span> OR 鎿嶄綔絎﹁繘琛屾潵鑱旂粨鏌ヨ鏉′歡闆嗗悎銆?/span>
Criterion 鐨勫疄渚嬪彲浠ラ氳繃 Restrictions 宸ュ叿綾繪潵鍒涘緩錛?/span> Restrictions 鎻愪緵浜嗗ぇ閲忕殑闈欐佹柟娉曪紝濡?/span> eq 錛堢瓑浜庯級銆?/span> ge 錛堝ぇ浜庣瓑浜庯級銆?/span> between 絳夋潵鏂規(guī)硶鐨勫垱寤?/span> Criterion 鏌ヨ鏉′歡
錛?/span> SimpleExpression 瀹炰緥錛夈傞櫎姝や箣澶栵紝 Restrictions 榪樻彁渚涗簡鏂規(guī)硶鏉ュ垱寤?/span> conjunction 鍜?/span> disjunction 瀹炰緥錛岄氳繃寰璇ュ疄渚嬬殑 add(Criteria) 鏂規(guī)硶鏉ュ鍔犳煡璇㈡潯浠跺艦鎴愪竴涓煡璇㈡潯浠墮泦鍚堛?/span>
鑷充簬 Example 鐨勫垱寤烘湁鎵涓嶅悓錛?/span> Example 鏈韓鎻愪緵浜嗕竴涓潤鎬佹柟娉?/span> create(Object entity) 錛屽嵆鏍規(guī)嵁涓涓璞★紙瀹為檯浣跨敤涓竴鑸槸鏄犲皠鍒版暟鎹簱鐨勫璞★級鏉ュ垱寤恒傜劧鍚庡彲浠ヨ緗竴浜涜繃婊ゆ潯浠訛細(xì)
Example exampleUser =Example.create(u)
.ignoreCase() // 蹇界暐澶у皬鍐?/span>
.enableLike(MatchMode.ANYWHERE);
// 瀵?/span> String 綾誨瀷鐨勫睘鎬э紝鏃犺鍦ㄩ偅閲屽煎湪閭i噷閮藉尮閰嶃傜浉褰撲簬 %value%
鍥?/span>
2
聽聽聽聽聽聽
Project 涓昏鏄 Criteria 鑳藉榪涜鎶ヨ〃鏌ヨ錛屽茍鍙互瀹炵幇鍒嗙粍銆?/span> Project 涓昏鏈?/span> SimpleProjection 銆?/span> ProjectionList 鍜?/span> Property 涓変釜瀹炵幇銆傚叾涓?/span> SimpleProjection 鍜?/span> ProjectionList 鐨勫疄渚嬪寲鏄敱鍐呭緩鐨?/span> Projections 鏉ュ畬鎴愶紝濡傛彁渚涚殑 avg 銆?/span> count 銆?/span> max 銆?/span> min 銆?/span> sum 鍙互璁╁紑鍙戣呭緢瀹規(guī)槗瀵規(guī)煇涓瓧孌佃繘琛岀粺璁℃煡璇€?/span>
聽聽聽聽聽聽 Property 鏄鏌愪釜瀛楁榪涜鏌ヨ鏉′歡鐨勮緗紝濡傞氳繃
聽聽聽聽聽 Porperty.forName(鈥渃olor鈥?.in(new String[]{鈥渂lack鈥?鈥漴ed鈥?鈥漺rite鈥潁); 鍒欏彲浠ュ垱寤轟竴涓?/span> Project 瀹炰緥銆傞氳繃 criteria 鐨?/span> add(Project) 鏂規(guī)硶鍔犲叆鍒版煡璇㈡潯浠朵腑鍘匯?/span>
鍥?/span>
3
聽聽聽聽聽聽
聽聽聽聽聽聽 浣跨敤 Criteria 榪涜鏌ヨ錛屼富瑕佽娓呮櫚鐨勬槸 Hibernate 鎻愪緵浜嗛偅浜涚被鍜屾柟娉曟潵婊¤凍寮鍙戜腑鏌ヨ鏉′歡鐨勫垱寤哄拰緇勮錛屽叾緇撴瀯灞傛濡備綍銆傝繖鏍蜂嬌鐢ㄨ搗鏉ヤ究鍙緱蹇冨簲鎵嬨?/span>
聽聽聽聽聽聽
鏈榪戝湪欏圭洰涓嬌鐢?/span> Spring 鍜?/span> Hibernate 榪涜寮鍙戯紝鏈夋劅浜?/span> Criteria 姣旇緝濂界敤錛屽湪鏌ヨ鏂規(guī)硶璁捐涓婂彲浠ョ伒媧葷殑鏍規(guī)嵁 Criteria 鐨勭壒鐐規(guī)潵鏂逛究鍦拌繘琛屾煡璇㈡潯浠剁殑緇勮銆傛墍浠ョ幇鍦ㄥ Hibernate 鐨?/span> Criteria 娣卞叆鐮旂┒涓涓嬨傘?/span> Hibernate Reference 銆嬪強緗戜笂鍏跺畠涓浜涜祫鏂欏 Criteria 宸茬粡鍋氫簡寰堝浠嬬粛銆傛湰鏂囦富瑕佹槸浠?/span> Criteria 鐨勭粨鏋勫叆鎵嬫潵榪涜鍒嗘瀽銆?/span>聽聽聽聽聽聽 濡傚浘 1 銆?/span> Hibernate 璁捐浜?/span> CriteriaSpecification 浣滀負(fù) Criteria 鐨勯《綰ф帴鍙o紝鍏朵笅闈㈡彁渚涗簡 Criteria 鍜?/span> DetachedCriteria 銆?/span>
Criteria 鍜?/span> DetachedCriteria 鐨勪富瑕佸尯鍒湪浜庡垱寤虹殑褰㈠紡涓嶄竴鏍鳳紝 Criteria 鏄湪綰跨殑錛屾墍浠ュ畠鏄敱 Hibernate Session 榪涜鍒涘緩鐨勶紱鑰?/span> DetachedCriteria 鏄綰跨殑錛屽垱寤烘椂鏃犻渶 Session 錛?/span> DetachedCriteria 鎻愪緵浜?/span> 4 涓潤鎬佹柟娉?/span> forClass(Class) 鎴?/span> forEntityName(Name) 榪涜 DetachedCriteria 瀹炰緥鐨勫垱寤恒?/span> Spring 鐨勬鏋舵彁渚涗簡
getHibernateTemplate().findByCriteria(detachedCriteria) 鏂規(guī)硶鍙互寰堟柟渚垮湴鏍規(guī)嵁
DetachedCriteria 鏉ヨ繑鍥炴煡璇㈢粨鏋溿?/span>
濡傚浘 1 錛?/span> Criteria 鍜?/span> DetachedCriteria 鍧囧彲浣跨敤 Criterion 鍜?/span> Projection 璁劇疆鏌ヨ鏉′歡銆傚彲浠ヨ緗?/span> FetchMode( 鑱斿悎鏌ヨ鎶撳彇鐨勬ā寮?/span> ) 錛岃緗帓搴忔柟寮忋傚浜?/span> Criteria 榪樺彲浠ヨ緗?/span> FlushModel 錛堝啿鍒?/span> Session 鐨勬柟寮忥級鍜?/span> LockMode 錛堟暟鎹簱閿佹ā寮忥級銆?/span>
涓嬮潰灝卞 Criterion 鍜?/span> Projection 榪涜璇︾粏璇存槑銆?/span>
聽聽聽聽聽聽
鍥?/span> 1
聽聽聽聽聽聽 Criterion 鏄?/span> Criteria 鐨勬煡璇㈡潯浠躲?/span>
Criteria 鎻愪緵浜?/span> add(Criterion criterion) 鏂規(guī)硶鏉ユ坊鍔犳煡璇㈡潯浠躲傚浘 2 鏄?/span> Criterion 鐨勭粨鏋勫浘銆?/span> Criterion 鎺ュ彛鐨勪富瑕佸疄鐜板寘鎷細(xì) Example 銆?/span> Junction 鍜?/span> SimpleExpression 銆傝?/span> Junction 鐨勫疄闄呬嬌鐢ㄦ槸瀹冪殑涓や釜瀛愮被 conjunction 鍜?/span> disjunction 錛屽垎鍒槸浣跨敤 AND 鍜?/span> OR 鎿嶄綔絎﹁繘琛屾潵鑱旂粨鏌ヨ鏉′歡闆嗗悎銆?/span>
Criterion 鐨勫疄渚嬪彲浠ラ氳繃 Restrictions 宸ュ叿綾繪潵鍒涘緩錛?/span> Restrictions 鎻愪緵浜嗗ぇ閲忕殑闈欐佹柟娉曪紝濡?/span> eq 錛堢瓑浜庯級銆?/span> ge 錛堝ぇ浜庣瓑浜庯級銆?/span> between 絳夋潵鏂規(guī)硶鐨勫垱寤?/span> Criterion 鏌ヨ鏉′歡
錛?/span> SimpleExpression 瀹炰緥錛夈傞櫎姝や箣澶栵紝 Restrictions 榪樻彁渚涗簡鏂規(guī)硶鏉ュ垱寤?/span> conjunction 鍜?/span> disjunction 瀹炰緥錛岄氳繃寰璇ュ疄渚嬬殑 add(Criteria) 鏂規(guī)硶鏉ュ鍔犳煡璇㈡潯浠跺艦鎴愪竴涓煡璇㈡潯浠墮泦鍚堛?/span>
鑷充簬 Example 鐨勫垱寤烘湁鎵涓嶅悓錛?/span> Example 鏈韓鎻愪緵浜嗕竴涓潤鎬佹柟娉?/span> create(Object entity) 錛屽嵆鏍規(guī)嵁涓涓璞★紙瀹為檯浣跨敤涓竴鑸槸鏄犲皠鍒版暟鎹簱鐨勫璞★級鏉ュ垱寤恒傜劧鍚庡彲浠ヨ緗竴浜涜繃婊ゆ潯浠訛細(xì)
Example exampleUser =Example.create(u)
.ignoreCase() // 蹇界暐澶у皬鍐?/span>
.enableLike(MatchMode.ANYWHERE);
// 瀵?/span> String 綾誨瀷鐨勫睘鎬э紝鏃犺鍦ㄩ偅閲屽煎湪閭i噷閮藉尮閰嶃傜浉褰撲簬 %value%
鍥?/span>
2
聽聽聽聽聽聽
Project 涓昏鏄 Criteria 鑳藉榪涜鎶ヨ〃鏌ヨ錛屽茍鍙互瀹炵幇鍒嗙粍銆?/span> Project 涓昏鏈?/span> SimpleProjection 銆?/span> ProjectionList 鍜?/span> Property 涓変釜瀹炵幇銆傚叾涓?/span> SimpleProjection 鍜?/span> ProjectionList 鐨勫疄渚嬪寲鏄敱鍐呭緩鐨?/span> Projections 鏉ュ畬鎴愶紝濡傛彁渚涚殑 avg 銆?/span> count 銆?/span> max 銆?/span> min 銆?/span> sum 鍙互璁╁紑鍙戣呭緢瀹規(guī)槗瀵規(guī)煇涓瓧孌佃繘琛岀粺璁℃煡璇€?/span>
聽聽聽聽聽聽 Property 鏄鏌愪釜瀛楁榪涜鏌ヨ鏉′歡鐨勮緗紝濡傞氳繃
聽聽聽聽聽 Porperty.forName(鈥渃olor鈥?.in(new String[]{鈥渂lack鈥?鈥漴ed鈥?鈥漺rite鈥潁); 鍒欏彲浠ュ垱寤轟竴涓?/span> Project 瀹炰緥銆傞氳繃 criteria 鐨?/span> add(Project) 鏂規(guī)硶鍔犲叆鍒版煡璇㈡潯浠朵腑鍘匯?/span>
鍥?/span>
3
聽聽聽聽聽聽
聽聽聽聽聽聽 浣跨敤 Criteria 榪涜鏌ヨ錛屼富瑕佽娓呮櫚鐨勬槸 Hibernate 鎻愪緵浜嗛偅浜涚被鍜屾柟娉曟潵婊¤凍寮鍙戜腑鏌ヨ鏉′歡鐨勫垱寤哄拰緇勮錛屽叾緇撴瀯灞傛濡備綍銆傝繖鏍蜂嬌鐢ㄨ搗鏉ヤ究鍙緱蹇冨簲鎵嬨?/span>