锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浜岀駭緙撳瓨?shù)篃绉皹q涚▼綰х殑緙撳瓨鎴朣essionFactory綰х殑緙撳瓨錛岃屼簩綰х紦瀛樺彲浠ヨ鎵鏈夌殑session(hibernate涓殑)鍏變韓浜岀駭緙撳瓨鐨勭敓鍛藉懆鏈熷拰SessionFactory鐨勭敓鍛藉懆鏈熶竴鑷達(dá)紝SessionFactory鍙互綆$悊浜岀駭緙撳瓨
浜岀駭緙撳瓨鐨勯厤緗拰浣跨敤錛?/p>
1.灝唀chcache.xml鏂囦歡鎷瘋礉鍒皊rc涓? 浜岀駭緙撳瓨hibernate榛樿鏄紑鍚殑錛屾墜鍔ㄥ紑鍚?/p>
2.寮鍚簩綰х紦瀛橈紝淇敼hibernate.cfg.xml鏂囦歡,
<property name=”hibernate.cache.user_second_level_cache”>true</property>
3.鎸囧畾緙撳瓨?shù)骇鍝佹彁渚涘?/p>
<property name=”hibernate.cache.provider_calss”>org.hibernate.cache.EhCacheProvider</property>
4.鎸囧畾閭d簺瀹炰綋綾諱嬌鐢ㄤ簩綰х紦瀛橈紙涓ょ鏂規(guī)硶錛屾帹鑽愪嬌鐢ㄧ浜岀錛?/p>
絎竴縐嶏細(xì)鍦?.hbm.xml涓紝鍦?lt;id>涔嬪墠鍔犲叆
<cache usage=”read-only” />, 浣跨敤浜岀駭緙撳瓨
絎簩縐嶏細(xì)鍦╤ibernate.cfg.xml閰嶇疆鏂囦歡涓?鍦?lt;mapping resource=”com/Studnet.hbm.xml” />鍚庨潰鍔犱笂錛?/p>
<class-cache class=” com.Studnet” usage=”read-only” />
浜岀駭緙撳瓨鏄紦瀛樺疄浣撳璞$殑
浜?jiǎn)瑙d竴綰х紦瀛樺拰浜岀駭緙撳瓨鐨勪氦浜?/p>
嫻嬭瘯浜岀駭緙撳瓨錛?/strong>
涓錛庡紑鍚袱涓?/strong>session涓彂鍑轟袱嬈?/strong>load鏌ヨ錛?/strong>get涓?/strong>load涓鏍鳳紝鍚屾牱涓嶄細(xì)鏌ヨ鏁版嵁搴擄級(jí),
Student sutdent = (Student)session.load(Student.class,1);
sessioin.close();
………..
寮鍚袱涓猻ession涓彂鍑轟袱嬈oad鏌ヨ錛岀涓嬈oad鐨勬椂鍊欎笉浼?xì)鍘绘煡璇㈡暟鎹簱锛屽洜湄?fù)浠栨槸LAZY鐨勶紝褰撲嬌鐢ㄧ殑鏃跺欐墠鍘繪煡璇㈡暟鎹簱錛?nbsp; 浜岋紟寮鍚袱涓?/strong>session錛屽垎鍒皟鐢?/strong>load錛屽啀浣跨敤sessionFactory娓呮浜岀駭緙撳瓨 Student sutdent = (Student)session.load(Student.class,1); sessioin.close(); ……….. SessionFactory factory = HibernateUtil.getSessionFactory(); //factory.evict(Student.class); //娓呴櫎鎵鏈塖tudent瀵硅薄 Factory.evict(Student.class,1); //娓呴櫎鎸囧畾id=1 鐨勫璞?/p>
寮鍚袱涓猻ession涓彂鍑轟袱嬈oad鏌ヨ錛岀涓嬈oad鐨勬椂鍊欎笉浼?xì)鍘绘煡璇㈡暟鎹簱锛屽洜湄?fù)浠栨槸LAZY鐨勶紝褰撲嬌鐢ㄧ殑鏃跺欐墠鍘繪煡璇㈡暟鎹簱錛?nbsp; 涓夛紟涓綰х紦瀛樺拰浜岀駭緙撳瓨鐨勪氦浜?/strong> session.setCacheMode(CacheMode.GET); Student sutdent = (Student)session.load(Student.class,1); sessioin.close(); ……….. SessionFactory factory = HibernateUtil.getSessionFactory(); //factory.evict(Student.class); //娓呴櫎鎵鏈塖tudent瀵硅薄 Factory.evict(Student.class,1); //娓呴櫎鎸囧畾id=1 鐨勫璞?/p>
寮鍚袱涓猻ession涓彂鍑轟袱嬈oad鏌ヨ錛岀涓嬈oad鐨勬椂鍊欎笉浼?xì)鍘绘煡璇㈡暟鎹簱锛屽洜湄?fù)浠栨槸LAZY鐨勶紝褰撲嬌鐢ㄧ殑鏃跺欐墠鍘繪煡璇㈡暟鎹簱錛?nbsp; session.setCacheMode(CacheMode.PUT); Student sutdent = (Student)session.load(Student.class,1); sessioin.close(); ……….. SessionFactory factory = HibernateUtil.getSessionFactory(); //factory.evict(Student.class); //娓呴櫎鎵鏈塖tudent瀵硅薄 Factory.evict(Student.class,1); //娓呴櫎鎸囧畾id=1 鐨勫璞?/p>
寮鍚袱涓猻ession涓彂鍑轟袱嬈oad鏌ヨ錛岀涓嬈oad鐨勬椂鍊欎笉浼?xì)鍘绘煡璇㈡暟鎹簱锛屽洜湄?fù)浠栨槸LAZY鐨勶紝褰撲嬌鐢ㄧ殑鏃跺欐墠鍘繪煡璇㈡暟鎹簱錛?nbsp; 涓綰х紦瀛樺緢鐭拰session鐨勭敓鍛藉懆鏈熶竴鑷達(dá)紝涓綰х紦瀛樹(shù)篃鍙玸ession綰х殑緙撳瓨鎴栦簨鍔$紦瀛?/p>
鍝簺鏂規(guī)硶鏀寔涓綰х紦瀛橈細(xì) *get() *load() *iterate() 濡備綍綆$悊涓綰х紦瀛橈細(xì) * session.clear() session.evict() 濡備綍閬垮厤涓嬈℃уぇ閲忕殑瀹炰綋鏁版嵁鍏ュ簱瀵艱嚧鍐呭瓨婧㈠嚭 *鍏坒lush錛屽啀clear 濡傛灉鏁版嵁閲忕壒鍒ぇ錛岃冭檻閲囩敤jdbc瀹炵幇錛屽鏋渏dbc涔熶笉鑳芥弧瓚寵姹傦紝鍙互鑰冭檻閲囩敤鏁版嵁搴撴湰韜殑鐗瑰畾瀵煎叆宸ュ叿 涓錛?/strong>Load嫻嬭瘯: 鍦ㄥ悓涓涓?/strong>session涓彂鍑轟袱嬈?/strong>load鏌ヨ Load嫻嬭瘯: 寮鍚袱涓?/strong>session涓彂鍑轟袱嬈?/strong>load鏌ヨ Student sutdent = (Student)session.load(Student.class,1); sessioin.close(); ……….. 浜岋紟Get嫻嬭瘯: 鍦ㄥ悓涓涓?/strong>session涓彂鍑轟袱嬈?/strong>get鏌ヨ 涓夛紟iterate嫻嬭瘯: 鍦ㄥ悓涓涓?/strong>session涓彂鍑轟袱嬈?/strong>iterator鏌ヨ Student student = (Student)session.createQuery(“from Student s where s.id=1”).iterate().next(); System.out.println(student.getName()); student = (Student)session.createQuery(“from Student s where s.id=1”).iterate().next(); System.out.println(student.getName()); 鍥涳紟Iterate鏌ヨ灞炴ф祴璇?/strong>: 鍚屼竴涓?/strong>session涓彂鍑轟袱嬈℃煡璇㈠睘鎬?/strong> String name = (String)session.createQuery(“select s.name from Student s where s.id=1”).iterate().next(); System.out.println(name); String name = (String)session.createQuery(“select s.name from Student s where s.id=1”).iterate().next(); System.out.println(name); Student sutdent = (Student)session.load(Student.class,id); save鐨勬椂鍊欙紝浠栦細(xì)鍦ㄧ紦瀛橀噷鏀句竴浠?涓嶄細(xì)鍙戝嚭sql錛屽洜涓簊ave鏄嬌鐢ㄧ紦瀛樼殑 鍏紟鍚屼竴涓?/strong>session涓厛璋冪敤load鏌ヨ錛岀劧鍚庢墽琛?/strong>sessio.clear()鎴?/strong>session.evict()錛屽啀璋冪敤load鏌ヨ Student sutdent = (Student)session.load(Student.class,1); Student sutdent = (Student)session.load(Student.class,1); 涓婇潰鐨勮鍙ラ兘浼?xì)鍙戝嚭sql 鍥犱負(fù)涓綰х紦瀛樹(shù)腑鐨勫疄浣撹娓呴櫎浜?/p>
涓冿紟鍚戞暟鎹簱涓壒閲忓姞鍏?/strong>1000鏉℃暟鎹?/strong> for(int i=0;i<1000;i++){ //姣?0鏉℃暟鎹氨寮哄埗session灝嗘暟鎹寔涔呭寲錛屽悓鏃舵竻闄ょ紦瀛橈紝閬垮厤澶ч噺鏁版嵁閫犳垚鍐呭瓨婧㈠嚭 } } hibernate鏌ヨ緙撳瓨(hibernate榛樿鏄叧闂殑) 鏌ヨ緙撳瓨鏄拡瀵規(guī)櫘閫氬睘鎬х粨鏋滈泦鐨勭紦瀛?/p>
瀵瑰疄浣撳璞$殑緇撴灉闆嗗彧緙撳瓨id 鏌ヨ緙撳瓨鐨勭敓鍛藉懆鏈燂紝褰撳墠鍏寵仈鐨勮〃鍙戠敓淇敼錛岄偅涔堟煡璇㈢紦瀛樼敓鍛藉懆鏈熺粨鏉?/p>
鏌ヨ緙撳瓨鐨勯厤緗拰浣跨敤錛?/p>
1. 鍚敤鏌ヨ緙撳瓨錛氬湪hibernate.cfg.xml涓姞鍏ワ細(xì) <property name=”hibernate.cache.use_query_cache”>true</property> 嫻嬭瘯鏌ヨ緙撳瓨錛?/strong> 涓錛?nbsp; Query query = session.createQuery(“select s.name from Student s”); //鍚敤鏌ヨ緙撳瓨 query.setCacheable(true); List names = query.list(); for(Iterator iter = names.terator();iter.hasNext();){ } System.out.println(“------------------------------------------”); query = session.createQuery(“select s.name from Student s”); //鍚敤鏌ヨ緙撳瓨 query.setCacheable(true); names = query.list(); for(Iterator iter = names.terator();iter.hasNext();){ } 絎簩嬈℃病鏈夊幓鏌ヨ鏁版嵁搴擄紝鍥犱負(fù)鍚敤浜?jiǎn)鏌ヨ缂撳?/p>
浜岋紟 Query query = session.createQuery(“select s.name from Student s”); //鍚敤鏌ヨ緙撳瓨 query.setCacheable(true); List names = query.list(); for(Iterator iter = names.terator();iter.hasNext();){ } session.close(); System.out.println(“------------------------------------------”); ……… Query query = session.createQuery(“select s.name from Student s”); //鍚敤鏌ヨ緙撳瓨 query.setCacheable(true); List names = query.list(); for(Iterator iter = names.terator();iter.hasNext();){ } 絎簩嬈℃病鏈夊幓鏌ヨ鏁版嵁搴擄紝鍥犱負(fù)鏌ヨ緙撳瓨鐢熷懡鍛ㄦ湡涓巗ession鐢熷懡鍛ㄦ湡鏃犲叧 涓夛紟 Query query = session.createQuery(“select s.name from Student s”); //鍚敤鏌ヨ緙撳瓨 query.setCacheable(true); for(Iterator iter =query.iterate();iter.hasNext();){ } session.close(); System.out.println(“------------------------------------------”); ……… Query query = session.createQuery(“select s.name from Student s”); //鍚敤鏌ヨ緙撳瓨 query.setCacheable(true); for(Iterator iter = query.iterate();iter.hasNext();){ } 絎簩鍘繪煡璇㈡暟鎹簱錛屽洜涓烘煡璇㈢紦瀛樺彧瀵筿uery.list()璧蜂綔鐢紝瀵筿uery.iterate()涓嶈搗浣滅敤,涔熷氨鏄query.iterate()涓嶄嬌鐢ㄦ煡璇㈢紦瀛?/p>
鍥涳紟 Query query = session.createQuery(“ from Student s”); //query.setCacheable(true); List students = query.list(); for(Iterator iter = students.iterate();iter.hasNext();){ } session.close(); System.out.println(“------------------------------------------”); ……… Query query = session.createQuery(“ from Student s”); //query.setCacheable(true); List students = query.list(); for(Iterator iter = students.iterate();iter.hasNext();){ } 絎簩鍘繪煡璇㈡暟鎹簱錛屽洜涓簂ist榛樿姣忔閮戒細(xì)鍙戝嚭鏌ヨsql 浜旓紟 Query query = session.createQuery(“ from Student s”); query.setCacheable(true); List students = query.list(); for(Iterator iter = students.iterate();iter.hasNext();){ } session.close(); System.out.println(“------------------------------------------”); ……… Query query = session.createQuery(“ from Student s”); query.setCacheable(true); List students = query.list(); for(Iterator iter = students.iterate();iter.hasNext();){ } 絎簩鍘繪煡璇㈡暟鎹簱鏃訛紝浼?xì)鍙戝嚭N鏉ql璇彞錛屽洜涓哄紑鍚簡(jiǎn)鏌ヨ緙撳瓨錛屽叧闂簡(jiǎn)浜岀駭緙撳瓨錛岄偅涔堟煡璇㈢紦瀛樹(shù)細(xì)緙撳瓨瀹炰綋瀵硅薄鐨刬d錛屾墍浠ibernate浼?xì)鏍规嵁瀹炰綋瀵硅薄鐨刬d鍘繪煡璇㈢浉搴旂殑瀹炰綋錛屽鏋滅紦瀛樹(shù)腑涓嶅瓨鍦ㄧ浉搴旂殑瀹炰綋錛岄偅涔堝皢鍙戝嚭鏍規(guī)嵁瀹炰綋id鏌ヨ鐨剆ql璇彞錛屽惁鍒欎笉浼?xì)鍙戝嚭sql錛屼嬌鐢ㄧ紦瀛樹(shù)腑鐨勬暟鎹?/p>
鍏紟 Query query = session.createQuery(“ from Student s”); query.setCacheable(true); List students = query.list(); for(Iterator iter = students.iterate();iter.hasNext();){ } session.close(); System.out.println(“------------------------------------------”); ……… Query query = session.createQuery(“ from Student s”); query.setCacheable(true); List students = query.list(); for(Iterator iter = students.iterate();iter.hasNext();){ } 絎簩涓嶄細(xì)鍙戝嚭sql錛屽洜涓哄紑鍚簡(jiǎn)浜岀駭緙撳瓨鍜屾煡璇㈢紦瀛橈紝鏌ヨ緙撳瓨緙撳瓨?shù)簡(jiǎn)瀹炰綋瀵硅薄鐨刬d鍒楄〃錛宧ibernate浼?xì)鏍规嵁瀹炰綋瀵硅薄鐨刬d鍒楄〃鍒頒簩綰х紦瀛樹(shù)腑鍙栧緱鐩稿簲鐨勬暟鎹?/p>
]]>
]]>
鏌ヨ鏁版嵁搴撴瘡嬈℃渶澶氳繑鍥?/strong>50鏉$粨鏋滐細(xì)
<property name=”hibernate.jdbc.fetch_size”>50</property>
30鏉℃洿鏂版暟鎹簱涓嬈?/strong>:
<property name= ”hibernatejdbc.batch_size”>30</property>
涓錛?/strong>hibernate 鎶撳彇絳栫暐(Fetch) 鍗曠浠g悊鎵歸噺鎶撳彇
1.fetch=”select” 鍏寵仈瀹炰綋
//fetch 榛樿鏄痵elect
<many-to-one name="businessId" column="business_id" insert="true" update="true" fetch="select">
Student student = (Student)session.load(Student.class,1);
System.out.println(student.getName());
System.out.println(student.getClasses().getName()); //澶氬涓涓殑灞炴х彮綰э紝鑾峰彇鐝駭鍚嶇О
Fetch=”select” ,涓婇潰紼嬪簭浼?xì)鍙?鏉ql璇彞錛岀浜屾潯鍙戦佷竴鏉elect璇彞鎶撳彇褰撳墠瀵硅薄鍏寵仈瀹炰綋鎴栭泦鍚?(榪欓噷鎸囨槸鐝駭鍚嶇О)
2.fetch=” join” 鍏寵仈瀹炰綋
//fetch 璁劇疆鎴?join
<many-to-one name="businessId" column="business_id" insert="true" update="true"
fetch=" join ">
Student student = (Student)session.load(Student.class,1);
System.out.println(student.getName());
System.out.println(student.getClasses().getName()); //澶氬涓涓殑灞炴х彮綰э紝鑾峰彇鐝駭鍚嶇О
fetch=” join” , 涓婇潰紼嬪簭浼?xì)鍙?鏉ql璇彞錛?hibernate浼?xì)閫氳繃select浣跨敤澶栭摼鎺ユ潵鍔犺澆鍏跺叧鑱斿疄浣撴垨闆嗗悎錛屾鏃秎azy浼?xì)澶辨?nbsp;
浜岋紟hibernate 鎶撳彇絳栫暐(Fetch) 闆嗗悎浠g悊鎵歸噺鎶撳彇
1.
//fetch 榛樿鏄痵elect
<set name="students" inverse="true" cascade="all" fetch="select">
</set>
Classes cla = (Classes)session.load(Classes.class,1);
System.out.println(cla.getName());
for(Iterator iter = cla.getStudents().iterator();iter.hasNext();){
}
fetch=”select” ,涓婇潰紼嬪簭鐢ㄥ埌浜?jiǎn)灏卞彂sql璇彞,絎簩浠庡驚鐜腑鍙戜簡(jiǎn)N鏉?濡傛灉錛歠etch=”subselect”,鍒欏彧鏄彂閫佷竴鏉¤鍙ワ紝瑙佷笅闈?/p>
2 fetch=”join”
//fetch 璁劇疆鎴恓oin
<set name="students" inverse="true" cascade="all" fetch="join">
</set>
Classes cla = (Classes)session.load(Classes.class,1);
System.out.println(cla.getName());
for(Iterator iter = cla.getStudents().iterator();iter.hasNext();){
}
Fetch=”select” ,涓婇潰紼嬪簭鍙彂浜?jiǎn)涓鏉ql璇彞
涓夛紟hibernate 鎶撳彇絳栫暐(Fetch) 闆嗗悎浠g悊鎵歸噺鎶撳彇
2.
//fetch璁劇疆鎴恠ubselect
<set name="students" inverse="true" cascade="all" fetch="subselect">
</set>
List classesList = session.createQuery(“select c from Classes c where c.id in(1,2,3)”);
for(Iterator iter=classesList.iterator();iter.hasNext();){
}
}
Fetch=”subselct” ,鍙﹀鍙戦佷竴鏉elect璇彞鎶撳彇鍦ㄥ墠闈㈡煡璇㈠埌鐨勬墍鏈夊疄浣撳璞$殑鍏寵仈闆嗗悎
鍥涳紟hibernate 鎵歸噺絳栫暐batch-size灞炴э紝鍙互鎵歸噺鍔犺澆瀹炰綋綾伙紝
鍙傝Classes.hbm.xml錛屽悓鏃墮泦鍚堜篃鍙互鏄嬌鐢紝濡傦細(xì)
鍦ㄩ厤緗枃浠秇bm.xml 璁劇疆涓細(xì)
<class name="com.Classes " table="tb_classes" batch-size=”3”>
List students = session.createQuery(“select s from Student s where s.id in(:ids)”).setParameterList(“:ids”,new Object[]{1,11,21,31,41,51,61,71,81,91}).list();
for(Iterator iter=students.iterator();iter.hasNext();){
}
褰撶浜屼釜for寰幆鏃訛紝姣忔鍔犺澆 涔嬪墠璁劇疆鐨?鏁伴噺 瀹炰綋瀵硅薄,
涓句釜渚嬪瓙錛?/p>
//鏌ヨid=1鐨勯偅鏉¤褰曪紝浣跨敤鎮(zhèn)茶閿?/p>
User user = (User)session.load(User.class, 1 , 浣跨敤浜?jiǎn)鏁版嵁搴撲腑鐨?for update 涔愯閿?/strong> 澶у鏁板熀浜庢暟鎹増鏈褰曟満鍒訛紙version錛夊疄鐜幫紝涓鍗婃槸鍦ㄦ暟鎹簱琛ㄥ姞鍏ヤ竴涓獀ersion瀛楁錛岃鍙栨暟鎹椂灝嗙増鏈彿涓鍚岃鍑猴紝涔嬪悗鏇存柊鏁版嵁鏃剁増鏈彿鍔犱竴錛屽鏋滄彁浜ゆ暟鎹椂鐗堟湰鍙峰皬浜庢垨絳変簬鏁版嵁搴撹〃涓殑鐗堟湰鍙鳳紝鍒欒涓烘暟鎹槸榪囨湡鐨勶紝鍚﹀垯緇欎簣鏇存柊銆?/p>
鍏跺疄騫墮潪鏄攣錛屾槸涓縐嶅啿紿佹嫻?nbsp; 鍦?.hm.xml涓?娣誨姞綰㈣壊閮ㄥ垎錛?/p>
<class name="com.tao3c.orm.TbBusinessInfo" 鍏朵腑version鏄痗om.tao3c.orm.TbBusinessInfo綾葷殑灞炴э紝hiernbate浼?xì)鍘痪l存姢鐨勶紝涓嶇敤鑷繁鍘昏
]]>
涓句釜渚嬪瓙錛?/p>
//鏌ヨid=1鐨勯偅鏉¤褰曪紝浣跨敤鎮(zhèn)茶閿?/p>
User user = (User)session.load(User.class, 1 , 浣跨敤浜?jiǎn)鏁版嵁搴撲腑鐨?for update 涔愯閿?/strong> 澶у鏁板熀浜庢暟鎹増鏈褰曟満鍒訛紙version錛夊疄鐜幫紝涓鍗婃槸鍦ㄦ暟鎹簱琛ㄥ姞鍏ヤ竴涓獀ersion瀛楁錛岃鍙栨暟鎹椂灝嗙増鏈彿涓鍚岃鍑猴紝涔嬪悗鏇存柊鏁版嵁鏃剁増鏈彿鍔犱竴錛屽鏋滄彁浜ゆ暟鎹椂鐗堟湰鍙峰皬浜庢垨絳変簬鏁版嵁搴撹〃涓殑鐗堟湰鍙鳳紝鍒欒涓烘暟鎹槸榪囨湡鐨勶紝鍚﹀垯緇欎簣鏇存柊銆?/p>
鍏跺疄騫墮潪鏄攣錛屾槸涓縐嶅啿紿佹嫻?nbsp; 鍦?.hm.xml涓?娣誨姞綰㈣壊閮ㄥ垎錛?/p>
<class name="com.tao3c.orm.TbBusinessInfo" 鍏朵腑version鏄痗om.tao3c.orm.TbBusinessInfo綾葷殑灞炴э紝hiernbate浼?xì)鍘痪l存姢鐨勶紝涓嶇敤鑷繁鍘昏
]]>
User--à Role
user(id,name)
User綾伙細(xì)
private int
Role綾伙細(xì)
private int id;
User.hbm.xml涓細(xì)
<set name=”roles” table=”t_user_role”>
</set>
榪欐牱錛宧ibernate浼?xì)鑷姩漶旂敓涓棿琛╰_user_role(userid,roleid) 騫朵笖鏄鍚堜富閿紝userid涓簍_user鐨勫閿紝roleid涓簍_role鐨勫閿?/p>
浜岋紟hibernate澶氬澶氱殑瀛樺偍
Role r1 = new Role();
r1.setName(“鏁版嵁褰曞叆浜哄憳”);
Role r2 = new Role();
r2.setName(“鍟嗗姟涓葷”);
Role r3 = new Role();
r3.setName(“澶у尯緇忕悊”);
User u1 = new User();
u1.setName(“10”);
Set u1Roles = new HashSet();
u1Roles.add(r1);
u1Roles.add(r2);
u1.setRoles(u1Roles);
User u2 = new User();
u1.setName(“紲栧効”);
Set u2Roles = new HashSet();
u2Roles.add(r2);
u2Roles.add(r3);
u2.setRoles(u2Roles);
User u3 = new User();
u3.setName(“鏉頒雞”);
Set u3Roles = new HashSet();
u3Roles.add(r1);
u3Roles.add(r2);
u3Roles.add(r3);
u3.setRoles(u3Roles);
session.save(r1);
session.save(r2);
session.save(r3);
session.save(u1);
session.save(u2);
session.save(u3);
緇撴潫涔嬪悗錛屽湪絎笁寮犺〃涓篃鏈夋暟鎹?/p>
涓夛紟hibernate澶氬澶氱殑鍔犺澆
User user = (User)session.load(User.class,1);
System.out.println(user.getName());
for(Iterator iter = user.getRoles().iterator();iter.hasNext();){
}
涓夛紟hibernate澶氬澶氱殑 鍙屽悜鏄犲皠
User ß--.-àRole
user(id,name)
User綾伙細(xì)
private int
Role綾伙細(xì)
private int id;
User.hbm.xml涓細(xì)
<set name=”roles” table=”t_user_role”>
</set>
Role.hbm.xml涓細(xì)
<set name=”roles” table=”t_user_role”>
</set>
娉ㄦ剰錛屼笂闈腑闂磋〃鍚嶅瓧鏄竴鏍風(fēng)殑
榪欐牱錛宧ibernate涔熶細(xì)鑷姩浜х敓涓棿琛╰_user_role(userid,roleid) 騫朵笖鏄鍚堜富閿紝userid涓簍_user鐨勫閿紝roleid涓簍_role鐨勫閿?/p>
User--à Role
user(id,name)
User綾伙細(xì)
private int
Role綾伙細(xì)
private int id;
User.hbm.xml涓細(xì)
<set name=”roles” table=”t_user_role”>
</set>
榪欐牱錛宧ibernate浼?xì)鑷姩漶旂敓涓棿琛╰_user_role(userid,roleid) 騫朵笖鏄鍚堜富閿紝userid涓簍_user鐨勫閿紝roleid涓簍_role鐨勫閿?/p>
浜岋紟hibernate澶氬澶氱殑瀛樺偍
Role r1 = new Role();
r1.setName(“鏁版嵁褰曞叆浜哄憳”);
Role r2 = new Role();
r2.setName(“鍟嗗姟涓葷”);
Role r3 = new Role();
r3.setName(“澶у尯緇忕悊”);
User u1 = new User();
u1.setName(“10”);
Set u1Roles = new HashSet();
u1Roles.add(r1);
u1Roles.add(r2);
u1.setRoles(u1Roles);
User u2 = new User();
u1.setName(“紲栧効”);
Set u2Roles = new HashSet();
u2Roles.add(r2);
u2Roles.add(r3);
u2.setRoles(u2Roles);
User u3 = new User();
u3.setName(“鏉頒雞”);
Set u3Roles = new HashSet();
u3Roles.add(r1);
u3Roles.add(r2);
u3Roles.add(r3);
u3.setRoles(u3Roles);
session.save(r1);
session.save(r2);
session.save(r3);
session.save(u1);
session.save(u2);
session.save(u3);
緇撴潫涔嬪悗錛屽湪絎笁寮犺〃涓篃鏈夋暟鎹?/p>
涓夛紟hibernate澶氬澶氱殑鍔犺澆
User user = (User)session.load(User.class,1);
System.out.println(user.getName());
for(Iterator iter = user.getRoles().iterator();iter.hasNext();){
}
涓夛紟hibernate澶氬澶氱殑 鍙屽悜鏄犲皠
User ß--.-àRole
user(id,name)
User綾伙細(xì)
private int
Role綾伙細(xì)
private int id;
User.hbm.xml涓細(xì)
<set name=”roles” table=”t_user_role”>
</set>
Role.hbm.xml涓細(xì)
<set name=”roles” table=”t_user_role”>
</set>
娉ㄦ剰錛屼笂闈腑闂磋〃鍚嶅瓧鏄竴鏍風(fēng)殑
榪欐牱錛宧ibernate涔熶細(xì)鑷姩浜х敓涓棿琛╰_user_role(userid,roleid) 騫朵笖鏄鍚堜富閿紝userid涓簍_user鐨勫閿紝roleid涓簍_role鐨勫閿?/p>
1.涓ょ閰嶇疆鏂囦歡錛?/p>
A.hibernate.cfg.xml鍜孊.hibernate.properties
A涓彲鍚槧灝勬枃浠剁殑閰嶇疆錛岃孊涓環(huán)ard codes鍔犳槧灝勬枃浠躲?/p>
A.Configuration config=new Configuration().config();
B. Configuration config=new Configuration();
config.addClass(TUser.class);
2.浣犱笉蹇呬竴瀹氱敤hibernate.cfg.xml鎴杊ibernate.properties榪欎袱鏂囦歡鍚嶏紝浣犱篃涓嶄竴瀹氶潪寰楁妸閰嶇疆鏂囦歡鏀懼湪Classes涓嬶紝銆File file=new File("c:\\sample\\myhibernate.xml");銆Configuration config=new Configuration().config(file);
3. session.Flush() 寮哄埗鏁版嵁搴撶珛鍗沖悓姝ワ紝褰撶敤浜嬪姟鏃訛紝涓嶅繀鐢╢lush,浜嬪姟鎻愪氦鑷姩璋冪敤flush鍦╯ession鍏抽棴鏃朵篃浼?xì)璋冪敤flush
4. Hibernate鎬繪槸浣跨敤瀵硅薄綾誨瀷浣滀負(fù)瀛楁綾誨瀷
5. XDoclet涓撻棬寤虹珛浜?jiǎn)hibernate doclet,灝辨槸鍦╦ava浠g爜涓婂姞涓婁竴浜沯ava docTag錛屽悗鏉ュ啀璁Doclet鍒嗘瀽璇ava浠g爜錛岀敓鎴愭槧灝勬枃浠?
6.HQL瀛愬彞鏈韓澶у皬鍐欐棤鍏籌紝浣嗘槸鍏朵腑鍑虹幇鐨勭被鍚嶅拰灞炴у悕蹇呴』娉ㄦ剰澶у皬鍐欏尯鍒嗐?/p>
7.鍏崇郴錛氥Constrained : 綰︽潫錛岃〃鏄庝富鎺ц〃鐨勪富閿笂鏄惁瀛樺湪涓涓閿紙foreigh key錛夊鍏惰繘琛岀害鏉熴?/p>
property-ref:鍏寵仈綾諱腑鐢ㄤ簬涓庝富鎺х被鐩稿叧鑱旂殑灞炴у悕錛岄粯璁や負(fù)鍏寵仈綾葷殑涓婚敭灞炴у悕
鍗曞悜涓瀵瑰闇鍦ㄤ竴鏂歸厤緗紝鍙屽悜涓瀵瑰闇鍦ㄥ弻鏂硅繘琛岄厤緗?/p>
8.lazy=false:琚姩鏂圭殑璁板綍鐢県ibernate璐熻矗璁板彇錛屼箣鍚庡瓨鏀懼湪涓繪帶鏂規(guī)寚瀹氱殑Collection綾誨瀷灞炴т腑
9. java.util.Set鎴杗et.sof.hibernate.collecton.Bag綾誨瀷鐨凜ollection
10.閲嶈錛歩nverse:鐢ㄤ簬鏍囪瘑鍙屽悜鍏寵仈涓殑琚姩鏂逛竴绔?/p>
inverse=false鐨勪竴鏂癸紙涓繪帶鏂癸級(jí)璐熻矗緇存姢鍏寵仈鍏崇郴.榛樿鍊鹼細(xì)false
11.batch-size:閲囩敤寤惰繜鍔犺澆鐗瑰緛鏃訛紝涓嬈¤鍏ョ殑鏁版嵁鏁版槰銆?/p>
12.涓瀵瑰閫氳繃涓繪帶鏂規(guī)洿鏂幫紙涓繪帶鏂逛負(fù)涓鏂規(guī)椂錛?/p>
user.getAddresses().add(addr);
session.save(user);//閫氳繃涓繪帶瀵硅薄綰ц仈鏇存柊
13.鍦╫ne-to-many 鍏崇郴涓紝灝唌any 涓鏂硅涓轟富鍔ㄦ柟錛坕nverse=false錛夊皢鏈夊姪鎬ц兘鐨勬敼鍠勩傚湪涓鏂硅緗叧緋繪椂錛宨nverse=true,鍗沖皢涓繪帶鏉冧氦緇欏鏂癸紝銆榪欐牱澶氭柟鍙富鍔ㄤ粠涓鏂硅幏寰梖oreign key,鐒跺悗涓嬈nsert鍗沖彲瀹屽伐銆?/p>
addr.setUser(user);//璁劇疆鍏寵仈鐨凾User瀵硅薄
user.getAddresses().add(addr);
session.save(user);//綰ц仈鏇存柊
14.鍙湁璁句負(fù)涓繪帶鏂圭殑涓鏂規(guī)墠鍏沖績(jī)錛堣闂級(jí)瀵規(guī)柟鐨勫睘鎬э紝琚姩鏂規(guī)槸涓嶅叧蹇?jī)瀵规柟鐨勫睘鎬х殑銆?/p>
15.one-to-many涓巑any-to-one鑺傜偣鐨勯厤緗睘鎬т笉鍚岋細(xì)
涓瀵瑰鍏崇郴澶氫簡(jiǎn)lazy鍜宨nverse涓や釜灞炴у瀵瑰鑺傜偣灞炴э細(xì)
column:涓棿鏄犲皠琛ㄤ腑錛屽叧鑱旂洰鏍囪〃鐨勫叧鑱斿瓧孌?/p>
class:綾誨悕錛屽叧鑱旂洰鏍囩被
outer-join:鏄惁浣跨敤澶栬仈鎺?/p>
娉ㄦ剰:access鏄緗睘鎬у肩殑璇誨彇鏂瑰紡銆?/p>
column鏄緗叧鑱斿瓧孌點(diǎn)?/p>
16.澶氬澶氾紝娉ㄦ剰涓ゆ柟閮借璁劇疆inverse鍜宭azy,cascade鍙兘璁句負(fù)insert-update
澶氬澶氬叧緋諱腑錛岀敱浜庡叧鑱斿叧緋繪槸涓ゅ紶琛ㄧ浉浜掑紩鐢紝鍥犳鍦ㄤ繚瀛樺叧緋葷姸鎬佹椂蹇呴』瀵瑰弻鏂瑰悓鏃朵繚瀛樸?/p>
group1.getRoles().add(role1);銆role1.getGroups().add(group1);
session.save(role1);銆session.save(group1);
17.鍏充簬vo鍜宲o銆vo緇忚繃hibernate瀹歸噺澶勭悊錛屽氨鍙樻垚浜?jiǎn)po(璇o鐨勫紩鐢ㄥ皢琚鍣ㄤ繚瀛橈紝騫朵笖鍦╯ession鍏抽棴鏃秄lush,鍥犳po濡傛灉鍐嶄紶鍒板叾瀹冨湴鏂規(guī)敼鍙樹(shù)簡(jiǎn)錛屽氨鍗遍櫓浜?銆vo鍜宲o鐩鎬簰杞崲錛欱eanUtils.copyProperties(anotherUser,user);
18.瀵逛簬save鎿嶄綔鑰岃█錛屽鏋滃璞″凡緇忎笌Session鐩稿叧鑱旓紙鍗沖凡緇忚鍔犲叆Session鐨勫疄浣撳鍣ㄤ腑錛夛紝鍒欐棤闇榪涜鍏蜂綋鐨勬搷浣溿傚洜涓轟箣鍚庣殑Session.flush榪囩▼涓紝Hibernate 浼?xì)瀵规瀹炰綋瀹瑰櫒涓殑瀵硅薄杩涜閬嶅巻锛屾煡鎵惧嚭鍙戠敓鍙樺寲鐨勫疄浣撳Q岀敓鎴愬茍鎵ц鐩稿簲鐨剈pdate 璇彞銆?/p>
19.濡傛灉鎴戜滑閲囩敤浜?jiǎn)鍤g榪熷姞杞芥満鍒訛紝浣嗗笇鏈涘湪涓浜涙儏鍐典笅錛屽疄鐜伴潪寤惰繜鍔犺澆鏃剁殑鍔熻兘錛屼篃灝辨槸璇達(dá)紝鎴戜滑甯屾湜鍦⊿ession鍏抽棴鍚庯紝渚濈劧鍏佽鎿嶄綔user鐨刟ddresses 灞炴?Hibernate.initialize鏂規(guī)硶鍙互閫氳繃寮哄埗鍔犺澆鍏寵仈瀵硅薄瀹炵幇榪欎竴鍔熻兘錛?榪欎篃姝f槸鎴戜滑涓轟粈涔堝湪緙栧啓POJO鏃訛紝蹇呴』鐢↗DK Collection鎺ュ彛錛堝Set,Map錛? 鑰岄潪鐗瑰畾鐨凧DK Collection瀹炵幇綾伙紙濡侶ashSet銆丠ashMap錛夌敵鏄嶤ollection灞炴х殑 鍘熷洜銆?/p>
20.浜嬪姟錛氫粠sessionFactory鑾峰緱session,鍏惰嚜鍔ㄦ彁浜ゅ睘鎬у氨宸茬粡鍏抽棴(AutoCommit=false),姝ゆ椂鑻ユ墽琛屼簡(jiǎn)jdbc鎿嶄綔錛屽鏋滀笉鏄懼紡璋冪敤session.BeginTransaction(),鏄笉浼?xì)鎵ц浜嬪姟鎿嶄綔鐨勩?/p>
jdbc transaction:鍩轟簬鍚屼竴涓猻ession(灝辨槸鍚屼竴涓猚onnection)鐨勪簨鍔?
jta銆transaction:璺╯ession錛堣法connection錛変簨鍔?
瀵逛簬jta浜嬪姟錛屾湁涓夌瀹炵幇鏂規(guī)硶錛?/p>
A銆俇serTransaction tx=new InitialContext().lookup("...");
tx.commit();
B. 浣跨敤hibernate灝佽鐨勬柟娉曪細(xì)(涓嶆帹鑽?
Transaction tx=session.beginTransaction();
tx.commit();
C. 浣跨敤ejb涔媠essionBean鐨勪簨鍔℃妧鎸佹柟娉曪紝浣犲彧瑕佸湪鎶婇渶瑕佸湪鍙戝竷鎻忚堪絎︿腑錛屾妸闇瑕乯ta浜嬪姟鐨勬柟娉曞0鏄庝負(fù)require鍗沖彲
21.鎮(zhèn)茶閿侊紝涔愯閿侊細(xì)銆涔愯閿佷竴鑸氳繃version鏉ュ疄鐜幫紝娉ㄦ剰version鑺傜偣蹇呴』鍑虹幇鍦╥d鍚庛?/p>
22.Hibernate涓紝鍙互閫氳繃Criteria.setFirstResult鍜孋riteria.setFetchSize鏂規(guī)硶璁懼畾鍒嗛〉鑼冨洿銆?/p>
Query鎺ュ彛涓篃鎻愪緵浜?jiǎn)涓庡叾涓鑷寸殑鏂規(guī)硶錛宧ibernate涓昏鍦╠ialect綾諱腑瀹炵幇鍦ㄨ繖涓姛鑳姐?/p>
23.cache
……
net.sf.ehcache.hibernate.Provider銆
榪橀渶瀵筫cache鏈韓榪涢厤緗?/p>
涔嬪悗鍦ㄦ槧灝勬枃浠朵腑鎸囧畾鍚勪釜鏄犲皠瀹炰綋鐨刢ache絳栫暐
....
....
***************************************************** Query.list()璺烸uery.iterate()鐨勪笉鍚岋細(xì)瀵逛簬query.list()鎬繪槸閫氳繃涓鏉ql璇彞鑾峰彇鎵鏈夎褰?鐒跺悗灝嗗叾璇誨嚭錛屽~鍏ojo榪斿洖; 浣嗘槸query.iterate()錛屽垯鏄鍏堥氳繃涓鏉elect SQL 鑾峰彇鎵鏈夌鍚堟煡璇㈡潯浠剁殑璁板綍鐨?id錛屽啀瀵硅繖涓猧d 闆嗗悎榪涜寰幆鎿嶄綔錛岄氳繃鍗曠嫭鐨凷elect SQL 鍙栧嚭姣忎釜id 鎵瀵瑰簲鐨勮 褰曪紝涔嬪悗濉叆POJO涓繑鍥炪?/p>
涔熷氨鏄錛屽浜巐ist 鎿嶄綔錛岄渶瑕佷竴鏉QL 瀹屾垚銆傝屽浜巌terate 鎿嶄綔錛岄渶瑕乶+1 鏉QL銆傦紝list鏂規(guī)硶灝嗕笉浼?xì)浠嶤ache涓鍙栨暟鎹俰terator鍗翠細(xì)銆?/p>
24.ThreadLocal:瀹冧細(xì)涓烘瘡涓嚎紼嬬淮鎶や竴涓鏈夌殑鍙橀噺絀洪棿銆傚疄闄呬笂錛?鍏跺疄鐜板師鐞嗘槸鍦↗VM 涓淮鎶や竴涓狹ap錛岃繖涓狹ap鐨刱ey 灝辨槸褰撳墠鐨勭嚎紼嬪璞★紝鑰寁alue鍒欐槸綰跨▼閫氳繃ThreadLocal.set鏂規(guī)硶淇濆瓨鐨勫璞″疄渚嬨傚綋綰跨▼璋冪敤ThreadLocal.get鏂規(guī)硶鏃訛紝 ThreadLocal浼?xì)鏍规嵁褰撳墠绾拷E嬪璞$殑寮曠敤錛屽彇鍑篗ap涓搴旂殑瀵硅薄榪斿洖銆?/p>
榪欐牱錛孴hreadLocal閫氳繃浠ュ悇涓嚎紼嬪璞$殑寮曠敤浣滀負(fù)鍖哄垎錛屼粠鑰屽皢涓嶅悓綰跨▼鐨勫彉閲忛殧紱誨紑鏉ャ?/p>
25.Hibernate瀹樻柟寮鍙戞墜鍐屾爣鍑嗙ず渚?
public class HibernateUtil { private static SessionFactory sessionFactory;
static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) { throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );
} } public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException { Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet if (s == null) { s = sessionFactory.openSession();
session.set(s);
} return s;
} public static void closeSession() throws HibernateException { Session s = (Session) session.get();
session.set(null);
if (s != null) s.close();
} }
26.閫氳繃filter瀹炵幇session鐨勯噸鐢細(xì)
public class PersistenceFilter implements Filter { protected static ThreadLocal hibernateHolder = new ThreadLocal();
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { hibernateHolder.set(getSession());
try { …… chain.doFilter(request, response);
…… } finally { Session sess = (Session)hibernateHolder.get();
if (sess != null) { hibernateHolder.set(null);
try { sess.close(); } catch (HibernateException ex) { throw new ServletException(ex);
} } } } ……}