锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浣跨敤 hibernate 蹇竴騫翠簡(jiǎn)錛屼竴鐩翠嬌鐢ㄥ緱姣旇緝鑲ゆ祬錛岀敋鑷蟲病鏈夋寮忎嬌鐢ㄨ繃瀵硅薄鍏崇郴銆傝繎孌墊椂闂存兂娣卞叆鐮旂┒涓涓嬶紝浠ヤ究鍦ㄩ」鐩腑鎺ㄥ箍錛屽噺灝戜笉蹇呰鐨勫璞$淮鎶ゅ拰緙栫▼銆傞棶棰樹笉鏈熻岄亣錛屽湪澶氬澶氬叧緋諱腑錛屽嚭鐜頒簡(jiǎn)閫掕鍔犺澆鐨勭幇璞★紝渚嬪錛氱敤鎴峰拰瑙掕壊鐨勫叧緋伙紝涓涓敤鎴峰彲鑳芥湁澶氫釜瑙掕壊錛屼竴涓鑹蹭腑鍖呭惈澶氫釜鐢ㄦ埛銆傛垜鏄氳繃甯︽湁榪炴帴琛ㄧ殑澶氬澶氬叧緋誨疄鐜扮殑錛岀敤鎴峰拰瑙掕壊瀵硅薄涓兘緇存寔浜?jiǎn)涓涓?/span> Set 瀵硅薄錛岀敤浠ュ歡榪熷姞杞藉叧緋匯備絾鏄紝鍦ㄦ垜寤惰繜鍔犺澆鐢ㄦ埛鎷ユ湁鐨勮鑹叉椂錛岃鍔犺澆鐨勮鑹插張鍔犺澆瀹冩墍鍖呭惈鐨勭敤鎴鳳紝琚姞杞界殑鐢ㄦ埛鍙堝姞杞芥墍鎷ユ湁鐨勮鑹詫紝榪欐牱閫掕鍔犺澆涓嬪幓錛岀敱浜?/span> session 鐨勫叧闂細(xì)鎶涘嚭寮傚父瀵艱嚧紼嬪簭涓銆傚紑濮嬬櫨鎬濅笉寰楀叾瑙o紝鍦ㄤ粩緇嗘煡鐪嬫姏鍑虹殑寮傚父鍫嗘爤鏃訛紝緇堜簬鍙戠幇浜?jiǎn)闂鎵鍦ㄣ備範(fàn)鎯紒閿欒鐨勪範(fàn)鎯傛垜浠墍浣跨敤鐨勬寔緇眰瀵硅薄浼?xì)鐟翩壙涓涓熀紜綾伙紝璇ョ被鈥滃疄鐜扳濅簡(jiǎn) hashCode 鍜?/span> equals 鏂規(guī)硶錛屼唬鐮佸涓嬶細(xì)
public boolean equals(Object o) { 聽聽聽 return EqualsBuilder.reflectionEquals(this, o); } public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } |
hibernate 灝嗙敤鎴鋒墍鎷ユ湁鐨勮鑹插璞℃斁榪?/span> Set 涓紝瀹為檯 Set 浼?xì)璋冪?/span> hashCode 鍜?/span> equals 鏉ュ垽鏂袱涓璞℃槸鍚︾浉絳夛紝榪欐牱闂灝辨潵浜?jiǎn)锛?/span> HashCodeBuilder.reflectionHashCode(this) 鏂規(guī)硶浣跨敤鍙嶅皠璋冪敤瑙掕壊瀵硅薄鐨?/span> getUsers() 鏂規(guī)硶錛?/span> hibernate 鍙堝姞杞借鑹叉墍鍖呭惈鐨勭敤鎴鳳紝鑳芥病鏈夐棶棰樺悧錛熺戶鑰屾垜浠緱鍙嶆濅竴涓嬫寔緇眰瀵硅薄鏈夋病鏈夐氱敤鐨?/span> hashCode 鍜?/span> equals 鏂規(guī)硶銆?/span>
聽聽聽聽聽聽 鍙傝冦婃繁鍏ユ祬鍑?/span> Hibernate 銆嬪 hashCode 鍜?/span> equals 鏂規(guī)硶鐨勫鐞嗘湁涓ゅぇ縐嶏細(xì)
1銆?span style="FONT: 7pt 'Times New Roman'">聽 涓嶈鐩?/span>
闂錛氬疄浣撳璞$殑璺?/span>
session
璇嗗埆闂錛屾牴鏈湪浜?/span>
hashCode
榛樿璋冪敤
System.identityHashCode()
鏂規(guī)硶銆?/span>
2銆?span style="FONT: 7pt 'Times New Roman'">聽 瑕嗙洊
脴聽聽聽聽聽聽聽聽 浣跨敤瀵硅薄 pk
闂錛氭柊澧炲璞℃椂錛屾病鏈?/span> pk 錛岄偅涔堟墍鏈夌殑瀵硅薄閮界浉絳変簡(jiǎn)錛屼篃灝辨槸鍙兘鍔犲叆鐨勪竴鏉°?/span>
脴聽聽聽聽聽聽聽聽 鍊兼瘮瀵癸紙瀵瑰疄浣撳璞$殑鎵鏈夊睘鎬у艱繘琛屾瘮瀵癸紝鍙互浣跨敤 Commonclipse 鑷姩鐢熸垚錛?/span>
闂錛氳繃浜庝弗鏍箋?/font>
脴聽聽聽聽聽聽聽聽 涓氬姟鍏抽敭淇℃伅鍒ゅ畾
鏄兼瘮瀵圭殑涓涓瓙闆嗭紝鍙仛涓氬姟鍏抽敭灞炴х殑姣斿銆?/font>
涓漢瑙夊緱涓氬姟鍏抽敭淇℃伅鍒ゅ畾鐨勬柟娉曟瘮杈冨悎鐞嗭紝浣跨敤 Commonclipse 鑷姩鐢熸垚鍊兼瘮瀵癸紝娉ㄦ剰涓ょ偣錛?/span>
1銆?span style="FONT: 7pt 'Times New Roman'">聽 鍘繪帀瀹炰綋鍏寵仈闆嗗悎灞炴х殑姣斿錛屼笉鐒跺張浼?xì)鍑虹幇鎴戜笂杩扮殑鈥滈掕鍔犺澆鈥濈幇璞°?/span>
2銆?span style="FONT: 7pt 'Times New Roman'">聽
鑷姩鐢熸垚鐨?/span>
hashCode
鏂規(guī)硶鍘繪帀
appendSuper(super.hashCode())
錛岃嚜鍔ㄧ敓鎴愮殑
equals
鏂規(guī)硶鍘繪帀
appendSuper(super.equals(object))
錛屼笉鐒朵綘鐨勫璞℃瘮杈冨拰鍔犲叆
collection
閮芥湁闂鐨勶紝銆婃繁鍏ユ祬鍑?/span>
Hibernate
銆嬩功涓病鏈夊己璋冦?/span>
灝界Hibernate 3.0 涓嶩ibernate2.1鐨勬簮浠g爜鏄笉鍏煎鐨勶紝浣嗘槸褰揌ibernate寮鍙戝皬緇勫湪璁捐Hibernate3.0鏃訛紝涓虹畝鍖栧崌綰ibernate鐗堟湰浣滀簡(jiǎn)鍛ㄥ埌鐨勮冭檻銆傚浜庣幇鏈夌殑鍩轟簬Hibernate2.1鐨凧ava欏圭洰錛屽彲浠ュ緢鏂逛究鐨勬妸瀹冨崌綰у埌Hibernate3.0銆?/font>
鏈枃鎻忚堪浜?jiǎn)Hibernate3.0鐗堟湰鐨勬柊鍙樺寲錛孒ibernate3.0鐗堟湰鐨勫彉鍖栧寘鎷笁涓柟闈細(xì)
錛?錛堿PI鐨勫彉鍖栵紝瀹冨皢褰卞搷鍒癑ava紼嬪簭浠g爜銆?br />錛?錛夊厓鏁版嵁錛屽畠?yōu)畣濯?jiǎng)鍝嶅埌瀵硅薄-鍏崇郴鏄犲皠鏂囦歡銆?br />錛?錛塇QL鏌ヨ璇彞銆?/font>
鍊煎緱娉ㄦ剰鐨勬槸錛?Hibernate3.0騫朵笉浼?xì)瀹屽叏鍙栦唬Hibernate2.1銆傚湪鍚屼竴涓簲鐢ㄧ▼搴忎腑錛屽厑璁窰ibernate3.0鍜孒ibernate2.1騫跺瓨銆?/font>
1.1 Hibernate API 鍙樺寲
1.1.1 鍖呭悕
Hibernate3.0鐨勫寘鐨勬牴璺緞涓? 鈥渙rg.hibernate鈥?錛岃屽湪Hibernate2.1涓負(fù)鈥渘et.sf.hibernate鈥濄傝繖涓鍛藉悕鍙樺寲浣垮緱Hibernate2.1鍜孒ibernate3.0鑳藉鍚屾椂鍦ㄥ悓涓涓簲鐢ㄧ▼搴忎腑榪愯銆?/font>
濡傛灉甯屾湜鎶婂凡鏈夌殑搴旂敤鍗囩駭鍒癏ibernate3.0錛岄偅涔堝崌綰х殑絎竴姝ユ槸鎶奐ava婧愮▼搴忎腑鐨勬墍鏈夆渘et.sf.hibernate鈥濇浛鎹負(fù)鈥渙rg.hibernate鈥濄?/font>
Hibernate2.1涓殑鈥渘et.sf.hibernate.expression鈥濆寘琚敼鍚嶄負(fù)鈥渙rg.hibernate.criterion鈥濄傚亣濡傚簲鐢ㄧ▼搴忎嬌鐢ㄤ簡(jiǎn)Criteria API錛岄偅涔堝湪鍗囩駭鐨勮繃紼嬩腑錛屽繀欏繪妸Java婧愮▼搴忎腑鐨勬墍鏈夆渘et.sf.hibernate.expression鈥濇浛鎹負(fù)鈥渙rg.hibernate.criterion鈥濄?/font>
濡傛灉搴旂敤浣跨敤浜?jiǎn)闄ibernate浠ュ鐨勫叾浠栧閮ㄨ蔣浠訛紝鑰岃繖涓閮ㄨ蔣浠跺張寮曠敤浜?jiǎn)Hibernate鐨勬帴鍙o紝閭d箞鍦ㄥ崌綰ф椂蹇呴』鍗佸垎灝忓績(jī)銆備緥濡侲HCache鎷ユ湁鑷繁鐨凜acheProvider錛?net.sf.ehcache.hibernate.Provider錛屽湪榪欎釜綾諱腑寮曠敤浜?jiǎn)Hibernate2.1涓殑鎺ュ彛錛屽湪鍗囩駭搴旂敤鏃訛紝鍙互閲囩敤浠ヤ笅鍔炴硶涔嬩竴鏉ュ崌綰HCache:
錛?錛夋墜宸ヤ慨鏀筺et.sf.ehcache.hibernate.Provider綾伙紝浣垮畠寮曠敤Hibernate3.0涓殑鎺ュ彛銆?br />錛?錛夌瓑鍒癊HCache杞歡鏈韓鍗囩駭涓轟嬌鐢℉ibernate3.0鍚庯紝浣跨敤鏂扮殑EHCache杞歡銆?br />錛?錛変嬌鐢℉ibernate3.0涓唴緗殑CacheProvider錛歰rg.hibernate.cache.EhCacheProvider銆?/font>
1.1.2 org.hibernate.classic鍖?/font>
Hibernate3.0鎶婁竴浜涜搴熷純鐨勬帴鍙i兘杞Щ鍒皁rg.hibernate.classic涓?/font>
1.1.3 Hibernate鎵渚濊禆鐨勭涓夋柟杞歡鍖?/font>
鍦℉ibernate3.0鐨勮蔣浠跺寘鐨刲ib鐩綍涓嬬殑README.txt鏂囦歡涓紝鎻忚堪浜?jiǎn)Hibernate3.0鎵渚濊禆鐨勭涓夋柟杞歡鍖呯殑鍙樺寲銆?/font>
1.1.4 寮傚父妯″瀷
鍦℉ibernate3.0涓紝HibernateException寮傚父浠ュ強(qiáng)瀹冪殑鎵鏈夊瓙綾婚兘緇ф壙浜?jiǎn)java.lang.RuntimeException銆傚洜姝ゅ湪緙栬瘧鏃訛紝緙栬瘧鍣ㄤ笉浼?xì)鍐崑個(gè)鏌ibernateException銆?/font>
1.1.5 Session鎺ュ彛
鍦℉ibernate3.0涓紝鍘熸潵Hibernate2.1鐨凷ession鎺ュ彛涓殑鏈変簺鍩烘湰鏂規(guī)硶涔熻搴熷純錛屼絾涓轟簡(jiǎn)綆鍖栧崌綰э紝榪欎簺鏂規(guī)硶渚濈劧鏄彲鐢ㄧ殑錛屽彲浠ラ氳繃org.hibernate.classic.Session瀛愭帴鍙f潵璁塊棶瀹冧滑錛屼緥濡傦細(xì)
org.hibernate.classic.Session session=sessionFactory.openSession();
session.delete("delete from Customer ");
鍦℉ibernate3.0涓紝org.hibernate.classic.Session鎺ュ彛緇ф壙浜?jiǎn)org.hibernate.Session鎺ュ彛錛屽湪org.hibernate.classic.Session鎺ュ彛涓寘鍚簡(jiǎn)涓緋誨垪琚簾寮冪殑鏂規(guī)硶錛屽find()銆乮nterate()絳夈係essionFactory鎺ュ彛鐨刼penSession()鏂規(guī)硶榪斿洖org.hibernate.classic.Session綾誨瀷鐨勫疄渚嬨傚鏋滃笇鏈涘湪紼嬪簭涓畬鍏ㄤ嬌鐢℉ibernate3.0錛屽彲浠ラ噰鐢ㄤ互涓嬫柟寮忓垱寤篠ession瀹炰緥錛?/font>
org.hibernate.Session session=sessionFactory.openSession();
濡傛灉鏄宸叉湁鐨勭▼搴忚繘琛岀畝鍗曠殑鍗囩駭錛屽茍涓斿笇鏈涗粛鐒惰皟鐢℉ibernate2.1涓璖ession鐨勪竴浜涙帴鍙o紝鍙互閲囩敤浠ヤ笅鏂瑰紡鍒涘緩Session瀹炰緥錛?/font>
org.hibernate.classic.Session session=sessionFactory.openSession();
鍦℉ibernate3.0涓紝Session鎺ュ彛涓搴熷純鐨勬柟娉曞寘鎷細(xì)
* 鎵ц鏌ヨ鐨勬柟娉曪細(xì)find()銆乮terate()銆乫ilter()鍜宒elete(String hqlSelectQuery)
* saveOrUpdateCopy()
Hibernate3.0涓寰嬮噰鐢╟reateQuery()鏂規(guī)硶鏉ユ墽琛屾墍鏈夌殑鏌ヨ璇彞錛岄噰鐢―ELETE 鏌ヨ璇彞鏉ユ墽琛屾壒閲忓垹闄わ紝閲囩敤merge()鏂規(guī)硶鏉ユ浛浠?saveOrUpdateCopy()鏂規(guī)硶銆?
鎻愮ず錛氬湪Hibernate2.1涓紝Session鐨刣elete()鏂規(guī)硶鏈夊嚑縐嶉噸杞藉艦寮忥紝鍏朵腑鍙傛暟涓篐QL鏌ヨ璇彞鐨刣elete()鏂規(guī)硶鍦℉ibernate3.0涓搴熷純錛岃屽弬鏁頒負(fù)Ojbect綾誨瀷鐨勭殑delete()鏂規(guī)硶渚濈劧琚敮鎸併俤elete(Object o)鏂規(guī)硶鐢ㄤ簬鍒犻櫎鍙傛暟鎸囧畾鐨勫璞★紝璇ユ柟娉曟敮鎸佺駭鑱斿垹闄ゃ?
Hibernate2.1娌℃湁瀵規(guī)壒閲忔洿鏂板拰鎵歸噺鍒犻櫎鎻愪緵寰堝ソ鐨勬敮鎸侊紝鍙傝<<綺鵑欻ibernate>>涓涔︾殑絎?3绔犵殑13.1.1鑺傦紙鎵歸噺鏇存柊鍜屾壒閲忓垹闄わ級(jí)錛岃孒ibernate3.0瀵規(guī)壒閲忔洿鏂板拰鎵歸噺鍒犻櫎鎻愪緵浜?jiǎn)鏀寔锛岃兘澶熺洿鎺ユ墽琛屾墯w噺鏇存柊鎴栨壒閲忓垹闄よ鍙ワ紝鏃犻渶鎶婅鏇存柊鎴栧垹闄ょ殑瀵硅薄鍏堝姞杞藉埌鍐呭瓨涓備互涓嬫槸閫氳繃Hibernate3.0鎵ц鎵歸噺鏇存柊鐨勭▼搴忎唬鐮侊細(xì)
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
.setString( "newName", newName )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
浠ヤ笅鏄氳繃Hibernate3.0鎵ц鎵歸噺鍒犻櫎鐨勭▼搴忎唬鐮侊細(xì)
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
1.1.6 createSQLQuery()
鍦℉ibernate3.0涓紝Session鎺ュ彛鐨刢reateSQLQuery()鏂規(guī)硶琚簾寮冿紝琚Щ鍒皁rg.hibernate.classic.Session鎺ュ彛涓侶ibernate3.0閲囩敤鏂扮殑SQLQuery鎺ュ彛鏉ュ畬鎴愮浉鍚岀殑鍔熻兘銆?/font>
1.1.7 Lifecycle 鍜?Validatable 鎺ュ彛
Lifecycle鍜孷alidatable 鎺ュ彛琚簾寮冿紝騫朵笖琚Щ鍒皁rg.hibernate.classic鍖呬腑銆?/font>
1.1.8 Interceptor鎺ュ彛
鍦↖nterceptor 鎺ュ彛涓姞鍏ヤ簡(jiǎn)涓や釜鏂扮殑鏂規(guī)硶銆?鐢ㄦ埛鍒涘緩鐨処nterceptor瀹炵幇綾誨湪鍗囩駭鐨勮繃紼嬩腑錛岄渶瑕佷負(fù)榪欎袱涓柊鏂規(guī)硶鎻愪緵鏂規(guī)硶浣撲負(fù)絀虹殑瀹炵幇銆傛澶栵紝instantiate()鏂規(guī)硶鐨勫弬鏁頒綔浜?jiǎn)淇敼锛宨sUnsaved()鏂規(guī)硶琚敼鍚嶄負(fù)isTransient()銆?/font>
1.1.9 UserType鍜孋ompositeUserType鎺ュ彛
鍦║serType鍜孋ompositeUserType鎺ュ彛涓兘鍔犲叆浜?jiǎn)涓浜涙柊鐨勬柟娉曪紝榪欎袱涓帴鍙h縐誨埌org.hibernate.usertype鍖呬腑錛岀敤鎴峰畾涔夌殑UserType鍜孋ompositeUserType瀹炵幇綾誨繀欏誨疄鐜拌繖浜涙柊鏂規(guī)硶銆?
Hibernate3.0鎻愪緵浜?jiǎn)ParameterizedType鎺ュ彛錛岀敤浜庢洿濂界殑閲嶇敤鐢ㄦ埛鑷畾涔夌殑綾誨瀷銆?
1.1.10 FetchMode綾?/font>
FetchMode.LAZY 鍜?FetchMode.EAGER琚簾寮冦傚彇鑰屼唬涔嬬殑鍒嗗埆涓篎etchMode.SELECT 鍜孎etchMode.JOIN銆?/font>
1.1.11 PersistentEnum綾?/font>
PersistentEnum琚簾寮冨茍鍒犻櫎銆傚凡緇忓瓨鍦ㄧ殑搴旂敤搴旇閲囩敤UserType鏉ュ鐞嗘灇涓劇被鍨嬨?/font>
1.1.12 瀵笲lob 鍜孋lob鐨勬敮鎸?/font>
Hibernate瀵笲lob鍜孋lob瀹炰緥榪涜浜?jiǎn)鍖呰锛屼娇寰楅偅浜涙嫢鏈塀lob鎴朇lob綾誨瀷鐨勫睘鎬х殑綾葷殑瀹炰緥鍙互琚父紱匯佸簭鍒楀寲鎴栧弽搴忓垪鍖栵紝浠ュ強(qiáng)浼犻掑埌merge()鏂規(guī)硶涓?/font>
1.1.13 Hibernate涓緵鎵╁睍鐨凙PI鐨勫彉鍖?/font>
org.hibernate.criterion銆?org.hibernate.mapping銆?org.hibernate.persister鍜宱rg.hibernate.collection 鍖呯殑緇撴瀯鍜屽疄鐜板彂鐢熶簡(jiǎn)閲嶅ぇ鐨勫彉鍖栥傚鏁板熀浜嶩ibernate
2.1 鐨勫簲鐢ㄤ笉渚濊禆浜庤繖浜涘寘錛屽洜姝や笉浼?xì)琚奖鍝嶃傚鏋滀綘鐨勫簲鐢ㄦ墿灞曚簡(jiǎn)榪欎簺鍖呬腑鐨勭被錛岄偅涔堝繀欏婚潪甯稿皬蹇?jī)鐨勫鍙楀奖鍝嶇殑绋嬪簭浠g爜杩涜鍗嚲Uс?/font>
1.2 鍏冩暟鎹殑鍙樺寲
1.2.1 媯(gè)绱㈢瓥鐣?/font>
鍦℉ibernate2.1涓紝lazy灞炴х殑榛樿鍊間負(fù)鈥渇alse鈥濓紝鑰屽湪Hibernate3.0涓紝lazy灞炴х殑榛樿鍊間負(fù)鈥渢rue鈥濄傚湪鍗囩駭鏄犲皠鏂囦歡鏃訛紝濡傛灉鍘熸潵鐨勬槧灝勬枃浠朵腑鐨勬湁鍏沖厓绱狅紝濡?lt;set>銆?lt;class>絳夋病鏈夋樉寮忚緗甽azy灞炴э紝閭d箞蹇呴』鎶婂畠浠兘鏄懼紡鐨勮緗負(fù)lazy=鈥渢rue鈥濄傚鏋滆寰楄繖縐嶅崌綰ф柟寮忓緢楹葷儲(chǔ)錛屽彲浠ラ噰鍙栧彟涓綆鍗曠殑鍗囩駭鏂瑰紡錛氬湪<hibernate-mapping>鍏冪礌涓緗? default-lazy=鈥渇alse鈥濄?
1.2.2 瀵硅薄鏍囪瘑絎︾殑鏄犲皠
unsaved-value灞炴ф槸鍙夌殑錛屽湪澶氭暟鎯呭喌涓嬶紝Hibernate3.0灝嗘妸unsaved-value="0" 浣滀負(fù)榛樿鍊箋?/font>
鍦℉ibernate3.0涓紝褰撲嬌鐢ㄨ嚜鐒朵富閿拰娓哥瀵硅薄鏃訛紝涓嶅啀寮鴻揩瀹炵幇Interceptor.isUnsaved()鏂規(guī)硶銆?濡傛灉娌℃湁璁劇疆榪欎釜鏂規(guī)硶錛屽綋Hibernate3.0鏃犳硶鍖哄垎瀵硅薄鐨勭姸鎬佹椂錛屼細(xì)鏌ヨ鏁版嵁搴擄紝鏉ュ垽鏂繖涓璞″埌搴曟槸涓存椂瀵硅薄錛岃繕鏄父紱誨璞°備笉榪囷紝鏄懼紡鐨勪嬌鐢↖nterceptor.isUnsaved()鏂規(guī)硶浼?xì)鑾峰緱鏇村ソ鐨勬ц兘錛屽洜涓鴻繖鍙互鍑忓皯Hibernate鐩存帴璁塊棶鏁版嵁搴撶殑嬈℃暟銆?/font>
1.2.3 闆嗗悎鏄犲皠
<index>鍏冪礌鍦ㄦ煇浜涙儏鍐典笅琚?lt;list-index>鍜?lt;map-key>鍏冪礌鏇夸唬銆傛澶栵紝Hibernate3.0鐢?lt;map-key-many-to-many> 鍏冪礌鏉ユ浛浠e師鏉ョ殑<key-many-to-many>.鍏冪礌錛岀敤<composite-map-key>鍏冪礌鏉ユ浛浠e師鏉ョ殑<composite-index>鍏冪礌銆?/font>
1.2.4 DTD
瀵硅薄-鍏崇郴鏄犲皠鏂囦歡涓殑DTD鏂囨。錛岀敱鍘熸潵鐨勶細(xì)
http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd
鏀逛負(fù)錛?br />
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
1.3 鏌ヨ璇彞鐨勫彉鍖?/font>
Hibernate3.0 閲囩敤鏂扮殑鍩轟簬ANTLR鐨凥QL/SQL鏌ヨ緲昏瘧鍣紝涓嶈繃錛孒ibernate2.1鐨勬煡璇㈢炕璇戝櫒涔熶緷鐒跺瓨鍦ㄣ傚湪Hibernate鐨勯厤緗枃浠朵腑錛宧ibernate.query.factory_class灞炴х敤鏉ラ夋嫨鏌ヨ緲昏瘧鍣ㄣ備緥濡傦細(xì)
錛?錛夐夋嫨Hibernate3.0鐨勬煡璇㈢炕璇戝櫒錛?br />hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
錛?錛夐夋嫨Hibernate2.1鐨勬煡璇㈢炕璇戝櫒
hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
鎻愮ず錛欰NTLR鏄敤綰疛ava璇█緙栧啓鍑烘潵鐨勪竴涓紪璇戝伐鍏鳳紝瀹冨彲鐢熸垚Java璇█鎴栬呮槸C++鐨勮瘝娉曞拰璇硶鍒嗘瀽鍣紝騫跺彲浜х敓璇硶鍒嗘瀽鏍?wèi)迤堝璇ユ爲(wèi)杩涜閬嶅巻銆侫NTLR鐢變簬鏄函Java鐨勶紝鍥犳鍙互瀹夎鍦ㄤ換鎰忓鉤鍙頒笂錛屼絾鏄渶瑕丣DK鐨勬敮鎸併?
Hibernate寮鍙戝皬緇勫敖鍔涗繚璇丠ibernate3.0鐨勬煡璇㈢炕璇戝櫒鑳藉鏀寔Hibernate2.1鐨勬墍鏈夋煡璇㈣鍙ャ備笉榪囷紝瀵逛簬璁稿宸茬粡瀛樺湪鐨勫簲鐢紝鍦ㄥ崌綰ц繃紼嬩腑錛屼篃涓嶅Θ浠嶇劧浣跨敤Hibernate2.1鐨勬煡璇㈢炕璇戝櫒銆?br />鍊煎緱娉ㄦ剰鐨勬槸錛?Hibernate3.0鐨勬煡璇㈢炕璇戝櫒瀛樺湪涓涓狟ug錛氫笉鏀寔鏌愪簺theta-style榪炵粨鏌ヨ鏂硅█錛氬Oracle8i鐨凮racleDialect鏂硅█銆丼ybase11Dialect銆傝В鍐寵繖涓闂鐨勫姙娉曟湁涓ょ錛氾紙1錛夋敼涓轟嬌鐢ㄦ敮鎸丄NSI-style榪炵粨鏌ヨ鐨勬柟璦錛屽 Oracle9Dialect,錛?錛夊鏋滃崌綰х殑鏃跺欓亣鍒拌繖涓闂錛岄偅涔堣繕鏄敼涓轟嬌鐢℉ibernate2.1鐨勬煡璇㈢炕璇戝櫒銆?/font>
1.3.1 indices()鍜宔lements()鍑芥暟
鍦℉QL鐨剆elect瀛愬彞涓簾寮冧簡(jiǎn)indices()鍜宔lements()鍑芥暟錛屽洜涓鴻繖涓や釜鍑芥暟鐨勮娉曞緢璁╃敤鎴瘋垂瑙o紝鍙互鐢ㄦ樉寮忕殑榪炴帴鏌ヨ璇彞鏉ユ浛浠?select elements(...) 銆傝屽湪HQL鐨剋here瀛愬彞涓紝浠嶇劧鍙互浣跨敤elements()鍑芥暟銆?/font>
聽
浠?span lang="EN-US">FCKeditor鐨勫畼鏂圭珯鐐?a >http://www.fckeditor.net/download涓婁笅杞紽CKeditor 2.3.2鍜孎CKeditor.Java錛屽叾涓璅CKeditor 2.3.2鏄簮鐮侊紝FCKeditor.Java鏄湪jsp涓嬌鐢ㄧ殑渚嬬▼銆?o:p>
灝?span lang="EN-US">FCKeditor 2.3.2瑙e帇鍒癋CKeditor鏂囦歡澶癸紝鐒跺悗鍒犻櫎濡備笅鏂囦歡鎴栫洰褰曪細(xì)
1銆?_samples錛?_testcases錛?o:p>
2銆佸垹闄?_documentation.html,_whatsnew.html,fckeditor.afp,fckeditor.asp,fckeditor.cfc,fckeditor.cfm,
fckeditor.lasso,fckeditor.php,fckeditor.pl,fckeditor.py
鍙墿涓媐ckconfig.js,fckeditor.js,fckstyles.xml,fcktemplates.xml,htaccess.txt,license.txt錛?o:p>
3銆?editor/_source錛?o:p>
4銆?editor/filemanager/browser/default/connectors錛?o:p>
5銆?editor/filemanager/upload錛?o:p>
6銆佽璦鍖?editor/lang涓彧鐣欎笅en.js銆亃h-cn.js錛?o:p>
鍝堝搱錛屼竴涓嬪瓙浠?span lang="EN-US">2.5M鐦﹀埌832K錛岀埥鍛錛佽繕鍙互鍦ㄧ毊鑲ゅ寘閲?editor/skins鍔ㄥ姩鑴戠瓔錛屾瘮濡傚彧鐣欎竴涓猻liver錛岃繖涓ソ閰嶈壊銆?o:p>
灝?span lang="EN-US">FCKeditor鐨刯sp涓嬌鐢ㄧ殑渚嬬▼鍜孎CKeditor婧愮爜緇撳悎璧鋒潵錛岃В鍘婩CKeditor.Java錛屽皢瑙e帇鏂囦歡澶逛腑web鐩綍涓嬬殑鎵鏈夋枃浠舵嫹璐濆埌FCKeditor鐩綍涓紝榪欐牱鍦‵CKeditor鐩綍澶氫簡(jiǎn)涓や釜鐩綍錛?o:p>
鈹溾攢_samples
鈹?span lang="EN-US">聽 鈹?span style="mso-spacerun: yes">聽 index.jsp
鈹?span lang="EN-US">聽 鈹?span style="mso-spacerun: yes">聽 sample.css
鈹?span lang="EN-US">聽 鈹?span style="mso-spacerun: yes">聽 sampleslist.jsp
鈹?span lang="EN-US">聽 鈹?span style="mso-spacerun: yes">聽
鈹?span lang="EN-US">聽 鈹斺攢jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample01.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample02.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample03.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample04.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample05.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample06.config.js
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample06.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sample07.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽 sampleposteddata.jsp
鈹?span lang="EN-US">聽聽聽聽聽聽聽聽聽
鈹斺攢WEB-INF
聽聽聽 鈹?span style="mso-spacerun: yes">聽 web.xml
聽聽聽 鈹?span style="mso-spacerun: yes">聽
聽聽聽 鈹斺攢lib
聽聽聽聽聽聽聽聽聽聽聽 FCKeditor-2.3.jar
聽聽聽聽聽聽聽聽聽聽聽 commons-fileupload.jar |
鐪嬩竴涓?span lang="EN-US">web.xml鏂囦歡錛岄噷闈㈠鍔犱簡(jiǎn)鏂囦歡嫻忚鍜屾枃浠朵笂浼犲緱servlet銆?o:p>
l聽聽聽聽聽聽聽聽
淇敼鏂囦歡FCKeditor/fckconfig.js
1銆?span style="FONT: 7pt 'Times New Roman'">聽
淇敼灞炴?span lang="EN-US">
涓枃錛?span lang="EN-US">FCKConfig.DefaultLanguage聽聽聽聽 = 'zh-cn' ;
鐨偆錛?span lang="EN-US">FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
2銆?span style="FONT: 7pt 'Times New Roman'">聽
浣跨敤servlet鍋氭枃浠舵祻瑙堝拰涓婁紶
鍙傝?span lang="EN-US">http://wiki.fckeditor.net/Developer%27s_Guide/Integration/Java
//browser
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector" ;
FCKConfig.FlashBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector" ;
//upload
FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ; |
l聽聽聽聽聽聽聽聽
淇敼web.xml澧炲姞FCKeditor鐨則aglib
浠?span lang="EN-US">FCKeditor.Java瑙e帇鐩綍/src鐩綍涓嬫嫹璐滷CKeditor.tld鏂囦歡鍒癢EB-INF鐩綍涓嬶紝鍦╳eb.xml鏂囦歡涓鍔狅細(xì)
<taglib>
聽聽聽 <taglib-uri>/WEB-INF/FCKeditor.tld</taglib-uri>
聽聽聽 <taglib-location>/WEB-INF/FCKeditor.tld</taglib-location>
</taglib> |
鍦?/span> jsp 欏甸潰涓綔濡備笅璋冪敤錛堝叿浣撳浣曚嬌鐢ㄥ彲浠ョ湅 FCKeditor.tld瀹氫箟 錛夛細(xì)
...
<%@ taglib uri="/WEB-INF/FCKeditor.tld" prefix="FCK" %>
...
<FCK:editor id="EditorDefault" basePath="/FCKeditor/">
This is FCKeditor demo! </FCK:editor>
... |
灝嗘垜浠慨鏀逛簡(jiǎn)鍗婂ぉ鐨勬暣涓?/span>
FCKeditor鐩綍鎷瘋礉鍒皌omcat5.0.28錛堟垨鍏朵粬web鏈嶅姟鍣級(jí)鐨剋ebapps鐩綍涓嬶紝鍚姩tomcat璁塊棶http://localhost:8080/FCKeditor/_samples/ 璇曠敤涓涓婩CKeditor 2.3.2鐨勫己澶у姛鑳斤紝鏈変簡(jiǎn)demo鍦ㄩ」鐩腑濡備綍浣跨敤錛屼綘鑷繁鐞㈢(鍚э紒
渚嬬▼涓嬭澆錛?/span>
FCKeditor
l
聽聽聽聽聽聽聽聽
澶氳璁′竴涓〉闈紱
l
聽聽聽聽聽聽聽聽
鐢ㄦ埛澶氬鍔犱竴姝ユ搷浣滐紙鐗瑰埆鏄湪淇℃伅淇敼欏甸潰錛夛紱
l
聽聽聽聽聽聽聽聽
甯︽潵欏甸潰鍒鋒柊鐨勯噸澶嶆彁浜ょ殑闂錛?/span>
鎴戜滑鏀瑰彉涓涓嬫濊礬浼?xì)甯︽潵鎰忔兂涓嶅埌鐨勬晥鏋滃Q屽悓鏃朵篃瑙勯伩浜?jiǎn)浠ヤ笂闂銆?/span>
鏂規(guī)硶涓
聽
1銆?/span>
聽
淇敼浣犵殑淇℃伅褰曞叆欏甸潰錛屽姞鍏ュ涓嬭剼鏈?/span>
鈥︹?/span>
<iframe name="tagFrame" style="display:none" frameborder="0"></iframe>
鈥︹?/span>
<script language="JavaScript">
<!--
//
淇濆瓨淇℃伅
function saveInfo() {
聽聽聽 testForm.action="test.do?method=save";聽
聽聽聽 testForm.target="tagFrame";
聽聽聽 testForm.submit();
}
//-->
</script>
|
2銆?/span>
聽
淇敼浣犵殑鎻愮ず欏甸潰
<%@ page contentType="text/html; charset=GBK" %>
<script language="javascript">
聽聽聽 alert("
淇濆瓨鎴愬姛錛?/span>
");
聽聽聽 //
榪欓噷鏄瓑寰呬綘鐐瑰嚮
alert
鐨勭‘瀹氭寜閽悗璺寵漿錛岀濂囩殑
js
聽聽聽 parent.window.location.href='test.do?method=test';
</script>
|
綆鍗曟敼涓涓嬪氨
jsp
鏀惰幏榪樹笉灝忋?/span>
鏂規(guī)硶浜?/span>
聽
璁゛ction榪斿洖javascript瀹屾垚鎻愮ず鍜岃煩杞細(xì)
public ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
聽聽聽聽聽聽聽聽聽聽聽 HttpServletResponse response) throws Exception {
銆傘傘?/span>
//
鍙戦佺殑淇℃伅
聽聽聽聽聽聽聽 String msg = "alert('
鎿嶄綔鎴愬姛錛?/span>
');location.href='test.do?method=test';";
聽聽聽聽聽聽聽 writeJsToFrontPage(response, msg);
聽聽聽聽聽聽聽 return null;
}
protected void writeJsToFrontPage(HttpServletResponse response,
String msg) throws IOException {
聽聽聽聽聽聽聽 response.setContentType("text/html; charset=utf-8");
聽聽聽聽聽聽聽 response.setHeader("Cache-Control", "no-cache");
聽聽聽聽聽聽聽 PrintWriter pw = response.getWriter();
聽聽聽聽聽聽聽 pw.write("<SCRIPT TYPE='text/javascript'>" + msg + "</SCRIPT>");
聽聽聽聽聽聽聽 pw.close();
聽聽聽 } |
鍩烘湰鎬濊礬錛?/STRONG>
鍦ㄤ俊鎭柊澧炴椂瀵逛俊鎭繘琛屼袱涓柟闈㈢殑淇濆瓨錛?銆佷繚瀛樺埌鏁版嵁搴擄紝鐩殑渚夸簬淇℃伅鐨勪慨鏀癸紱2銆佷嬌鐢╲elocity鐢熸垚闈?rùn)鎬佺殑html鏂囦歡錛屼互渚挎祻瑙堛傜敤鎴峰彲浠ヤ笅杞絭elocity鐨勨?vm鈥濇ā鏉匡紝鐢辯▼搴忚漿鍙樻垚鈥?html鈥濇枃浠剁粰鐢ㄦ埛錛岀敤鎴蜂慨鏀癸紙鍙互鍔犱笂css淇グ錛夊悗灝嗏?html鈥濇枃浠朵笂浼狅紝鐢辯▼搴忚漿鍙樻垚鈥?vm鈥濇枃浠舵斁鍒皏elocity璋冪敤鐨勬ā鏉跨洰褰曚腑銆?BR>
閬囧埌闂錛?BR>1銆乴og鏂囦歡鐢熸垚闂錛?BR>2銆佺紪鐮侀棶棰橈紱
3銆佹ā鏉胯礬寰勯棶棰橈紱
瑙e喅鏂規(guī)硶錛?BR>鍦╲elocity鍒濆鍖栨椂錛屾坊鍔犱互涓嬪睘鎬ч厤緗細(xì)
// 璁劇疆velocity鐨刲og
Velocity.setProperty(Velocity.RUNTIME_LOG, mainPath + File.separator + "velocity.log");
// 璁劇疆velocity鐨勮緭鍏ヨ緭鍑虹紪鐮?BR> Velocity.setProperty(Velocity.INPUT_ENCODING, "GBK");
Velocity.setProperty(Velocity.OUTPUT_ENCODING, "GBK");
// / 璁劇疆velocity鐨勬ā鏉胯礬寰勶紙蹇呰錛?BR> Velocity.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, mainPath + File.separator + "template";
// 鍒濆鍖杤elocity寮曟搸
try {
Velocity.init();
} catch (Exception e) {
e.printStackTrace();
}
鍏朵腑mainPath 鎸囦綘鐨勫簲鐢ㄥ彂甯冪洰褰曟垨鍏朵粬浠諱綍涓涓湁鏉冮檺浣跨敤鐩綍錛屽彲鐢遍厤緗枃浠跺畾涔夈?BR>
闂鍒嗘瀽錛?/STRONG>
1銆?鐐逛笉鐢ㄨ浜?jiǎn)锛岃璇唇W?鐐廣備竴寮濮嬫垜鍦ㄨ皟鐢ㄦā鏉挎椂浣跨敤緇濆璺緞鍜岀浉瀵硅礬寰勶紝鍙槸鎬庝箞嫻嬭瘯灝辨槸涓嶈錛屾繪槸鎶ワ細(xì)Unable to find resource銆傛煡鐪嬩簡(jiǎn)涓涓嬫簮鐮侊紝velocity璋冪敤鐨勬槸FileResourceLoader錛岄儴鍒嗘簮鐮佸涓嬶細(xì)
public void init( ExtendedProperties configuration)
{
rsvc.info("FileResourceLoader : initialization starting.");
paths = configuration.getVector("path");
/*
* lets tell people what paths we will be using
*/
int sz = paths.size();
for( int i=0; i < sz; i++)
{
rsvc.info("FileResourceLoader : adding path '" + (String) paths.get(i) + "'");
}
rsvc.info("FileResourceLoader : initialization complete.");
}
/**
* Get an InputStream so that the Runtime can build a
* template with it.
*
* @param name name of template to get
* @return InputStream containing the template
* @throws ResourceNotFoundException if template not found
* in the file template path.
*/
public synchronized InputStream getResourceStream(String templateName)
throws ResourceNotFoundException
{
/*
* Make sure we have a valid templateName.
*/
if (templateName == null || templateName.length() == 0)
{
/*
* If we don't get a properly formed templateName then
* there's not much we can do. So we'll forget about
* trying to search any more paths for the template.
*/
throw new ResourceNotFoundException(
"Need to specify a file name or file path!");
}
String template = StringUtils.normalizePath(templateName);
if ( template == null || template.length() == 0 )
{
String msg = "File resource error : argument " + template +
" contains .. and may be trying to access " +
"content outside of template root. Rejected.";
rsvc.error( "FileResourceLoader : " + msg );
throw new ResourceNotFoundException ( msg );
}
/*
* if a / leads off, then just nip that :)
*/
if (template.startsWith("/"))
{
template = template.substring(1);
}
int size = paths.size();
for (int i = 0; i < size; i++)
{
String path = (String) paths.get(i);
InputStream inputStream = findTemplate(path, template);
if (inputStream != null)
{
/*
* Store the path that this template came
* from so that we can check its modification
* time.
*/
templatePaths.put(templateName, path);
return inputStream;
}
}
/*
* We have now searched all the paths for
* templates and we didn't find anything so
* throw an exception.
*/
String msg = "FileResourceLoader Error: cannot find resource " +
template;
throw new ResourceNotFoundException( msg );
}
鍙浣?STRONG>涓瀹氳璁劇疆
// / 璁劇疆velocity鐨勬ā鏉胯礬寰勶紙蹇呰錛?BR> Velocity.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, mainPath + File.separator + "template";
1銆?SPAN style="FONT: 7pt 'Times New Roman'"> 鍋囧浣犺鎻愪氦鐨勯〉闈負(fù)toSubmit.jsp錛?o:p>
2銆?SPAN style="FONT: 7pt 'Times New Roman'"> 鍦ㄦ墦寮toSubmit.jsp鐨凙ction1涓姞鍏ワ細(xì)saveToken(request)錛屼緥濡?o:p>
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //鐢熸垚鍚屾浠ょ墝 saveToken(request); return mapping.findForward("toSubmit"); } |
3銆?SPAN style="FONT: 7pt 'Times New Roman'"> 鍦ㄦ彁浜?SPAN lang=EN-US>toSubmit.jsp鐨凙ction2涓姞鍏ワ細(xì)isTokenValid(request, true)錛屼緥濡傦細(xì)
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 楠岃瘉鍚屾浠ょ墝 if (isTokenValid(request, true)) { //鎵ц鎻愪氦鎿嶄綔 }else { // 閲嶅鎻愪氦 return mapping.findForward("Error"); } } |
4銆?SPAN style="FONT: 7pt 'Times New Roman'"> 浣跨敤娉ㄦ剰錛?SPAN lang=EN-US>toSubmit.jsp涓殑form蹇呴』浣跨敤struts鐨勬爣絳?lt;html:form>銆?o:p>
浜屻佸熀鏈師鐞?SPAN lang=EN-US>
絎竴姝ャ佸湪session涓斁鍏ュ悓姝ヤ護(hù)鐗?o:p>
鍦?SPAN lang=EN-US>Action1涓姞鍏ヤ簡(jiǎn)saveToken(request)鐨勬柟娉曞悗錛岃皟鐢═okenProcessor綾葷殑saveToken鏂規(guī)硶濡備笅錛?o:p>
public synchronized void saveToken(HttpServletRequest request) { HttpSession session = request.getSession(); String token = generateToken(request); if (token != null) { session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token); } } |
寰堟槑鏄懼湪session涓斁鍏ヤ簡(jiǎn)鍚屾浠ょ墝錛屽悕縐頒負(fù)Globals.TRANSACTION_TOKEN_KEY銆?o:p>
絎簩姝ャ佸湪欏甸潰鍒涘緩hidden鍏冪礌
褰撳簲鐢ㄦ湇鍔″櫒鍒濆鍖?SPAN lang=EN-US>toSubmit.jsp欏甸潰閬囧埌鏍囩<html:form>鏃訛紝渚夸細(xì)璋冪敤struts鐨凢ormTag綾伙紝鍏朵腑鏈変竴涓柟娉曪細(xì)
protected String renderToken() { StringBuffer results = new StringBuffer(); HttpSession session = pageContext.getSession(); if (session != null) { String token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); if (token != null) { results.append("<input type=\"hidden\" name=\""); results.append(Constants.TOKEN_KEY); results.append("\" value=\""); results.append(token); if (this.isXhtml()) { results.append("\" />"); } else { results.append("\">"); } } } return results.toString(); } |
鍏舵剰涓猴細(xì)褰撴嫻嬪埌session涓殑Globals.TRANSACTION_TOKEN_KEY涓嶄負(fù)絀烘椂錛屽湪toSubmit.jsp欏甸潰鍒涘緩鍏冪礌錛?o:p>
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value=""> |
鍚嶇О涓猴細(xì)org.apache.struts.taglib.html.TOKEN灝辨槸Constants.TOKEN_KEY錛?o:p>
鍊間負(fù)錛?SPAN lang=EN-US>session涓殑Globals.TRANSACTION_TOKEN_KEY鐨勫鹼紝鍗充負(fù)鍚屾浠ょ墝鍊箋?o:p>
絎笁姝ャ侀獙璇佸悓姝ヤ護(hù)鐗?SPAN lang=EN-US>
鍦?SPAN lang=EN-US>Action2涓姞鍏sTokenValid鏂規(guī)硶錛屽疄闄呬笂鏄皟鐢═okenProcessor綾葷殑isTokenValid鏂規(guī)硶濡備笅錛?o:p>
public synchronized boolean isTokenValid( HttpServletRequest request, boolean reset) { // Retrieve the current session for this request HttpSession session = request.getSession(false); if (session == null) { return false; } // Retrieve the transaction token from this session, and // reset it if requested String saved = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); if (saved == null) { return false; } if (reset) { this.resetToken(request); } // Retrieve the transaction token included in this request String token = request.getParameter(Constants.TOKEN_KEY); if (token == null) { return false; } return saved.equals(token); } |
瀹冮鍏堝彇寰?SPAN lang=EN-US>session涓殑浠ょ墝鍊鹼紝鐒跺悗resetToken錛屽啀浠庨〉闈idden鍏冪礌鍙栨潵浠ょ墝鍊鹼紝榪涜姣旇緝錛屽鏋滅浉絳夊垯涓虹涓嬈★紝涓嶇瓑鍒欎負(fù)閲嶅鎻愪氦銆?o:p>
鍏朵腑resetToken鏂規(guī)硶濡備笅錛?o:p>
public synchronized void resetToken(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session == null) { return; } session.removeAttribute(Globals.TRANSACTION_TOKEN_KEY); } |
鍦ㄤ俊鎭彂甯冪郴緇熶腑錛屽鏋滈渶瑕佸皢鐢ㄦ埛鍙戝竷鐨勪俊鎭繚瀛樺埌Oralcle9i鏁版嵁搴撲腑錛屼嬌鐢?/SPAN>varchar2(4000)鏈夋椂鏄笉澶熺敤鐨勶紝鍥犱負(fù)闄や簡(jiǎn)鐢ㄦ埛褰曞叆鐨勫唴瀹硅繕瑕佸姞涓?/SPAN>html緙栬緫鍣ㄩ檮鍔犵殑html鏍囪瘑錛屾墍浠ユ垜寤鴻浣跨敤clob銆?/SPAN>
鍔ㄦ墜
鍏跺疄涔熸尯綆鍗曠殑錛氫袱涓厤緗佷袱涓敞鎰?/FONT>
1銆?/SPAN>hbm閰嶇疆
<hibernate-mapping> <class name="com.wonders.pubinfo.bean.LawInfo" table="JZ_LAW_INFO"> <id column="ID" name="id" type="java.lang.String"> <generator class="uuid.hex"/> </id> <property column="TYPE" length="4" name="type" type="java.lang.String"/> <property column="TITLE" length="200" name="title" type="java.lang.String"/> <property column="KEYWORD" length="200" name="keyword" type="java.lang.String"/> <property column="CONTENT" name="content" type="org.springframework.orm.hibernate.support.ClobStringType"/> <property column="PUBLISH_TIME" length="23" name="publishTime" type="java.sql.Timestamp"/> <property column="PRACTICE_TIME" length="23" name="practiceTime" type="java.sql.Timestamp"/> <property column="END_TIME" length="23" name="endTime" type="java.sql.Timestamp"/> <property column="FILE_NUM" length="50" name="fileNum" type="java.lang.String"/> <property column="PUB_ORGAN" length="50" name="pubOrgan" type="java.lang.String"/> <property column="TEMPLATE" length="20" name="template" type="java.lang.String"/> <property column="VALIDITY" length="1" name="validity" type="java.lang.String"/> <property column="HTML_FILE" length="50" name="htmlFile" type="java.lang.String"/> </class> </hibernate-mapping> |
2銆?/SPAN>application閰嶇疆
<beans> <!--**** Start of PERSISTENCE DEFINITIONS ****--> <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>init.properties</value> </property> </bean>
<!-- JDBC Connection --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>${datasource.driverClassName}</value> </property> <property name="url"> <value>${datasource.url}</value> </property> <property name="username"> <value>${datasource.username}</value> </property> <property name="password"> <value>${datasource.password}</value> </property> <property name="maxActive"> <value>${datasource.maxActive}</value> </property> <property name="maxIdle"> <value>${datasource.maxIdle}</value> </property> <property name="maxWait"> <value>${datasource.maxWait}</value> </property> <property name="defaultAutoCommit"> <value>${datasource.defaultAutoCommit}</value> </property> </bean>
<!--**** OracleLobHandler ****--> <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"> <property name="nativeJdbcExtractor"> <ref local="nativeJdbcExtractor"/> </property> </bean> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"></bean>
<!--**** SessionFactory Definition ****--> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="lobHandler"> <ref bean="oracleLobHandler" /> </property> <property name="mappingResources"> <list> <value>com\wonders\pubinfo\bean\LawInfo.hbm.xml</value> <value>com\wonders\pubinfo\bean\LawType.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop> <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop> </props> </property> </bean> </beans> |
3銆佹敞鎰?/SPAN>
錛?/SPAN>1錛夈佹敞鎰忕孩鑹插瓧浣撻儴鍒嗭紝灝辨槸浣犺閰嶇疆鐨勶紱鍦ㄥ紩鐢?/SPAN>spring綾葷殑鍦版柟錛屾敞鎰忔煡鐪嬩竴涓嬩綘浣跨敤鐨?/SPAN>spring鍖呬腑鏈夌殑鍋氱浉搴斾慨鏀廣?/SPAN>
錛?/SPAN>2錛夈佹敞鎰忎嬌鐢ㄧ殑datasource涓瀹氫嬌鐢?/SPAN>NativeJdbcExtractor錛屽氨鏄傜敤jdbc榪炴帴錛屼笉瑕佺敤瀹瑰櫒鎻愪緵榪炴帴錛屼笉鐒朵細(xì)鎶ュ涓嬮敊璇細(xì)
OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [class com.ibm.ws.rsadapter.jdbc.WSJdbcConnection] - specify a corresponding NativeJdbcExtractor |
4銆?/SPAN>bean涓殑clob瀛楁浣跨敤String綾誨瀷
public class LawInfo implements Serializable { ... private String content; ... public String getContent() { return content; } public void setContent(String content) { this.content = content; } ... } |