锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产乱码最新视频,国产亚洲福利精品一区二区,亚洲AV无码久久久久网站蜜桃 http://m.tkk7.com/cader/category/12840.html瑕佹兂璐熷鐢熷瀛愬皯縐嶆爲zh-cnFri, 02 Mar 2007 02:42:41 GMTFri, 02 Mar 2007 02:42:41 GMT60CreateDAO_zhhttp://m.tkk7.com/cader/articles/57003.html璐熶漢鍗氬璐熶漢鍗氬Thu, 06 Jul 2006 09:53:00 GMThttp://m.tkk7.com/cader/articles/57003.htmlhttp://m.tkk7.com/cader/comments/57003.htmlhttp://m.tkk7.com/cader/articles/57003.html#Feedback0http://m.tkk7.com/cader/comments/commentRss/57003.htmlhttp://m.tkk7.com/cader/services/trackbacks/57003.html Part I: 在AppFuse建立DAO和对象 - 涓涓緩绔嬪璞?浠h〃鏁版嵁搴撶殑琛?鍜屾妸榪欎簺瀵硅薄瀛樺偍鍒版暟鎹簱鐨凧ava綾葷殑鏁欑▼銆?

鍏充簬鏈暀紼?/h3>鏈暀紼嬪皢鍚戜綘灞曠ず濡備綍鍦ㄤ竴涓暟鎹簱閲屽垱寤鴻〃錛屼互鍙婂浣曞畬鎴愯闂繖浜涜〃鐨凧ava浠g爜銆?

鎴戜滑灝嗗緩绔嬩竴涓璞′互鍙婂鐞嗭紙淇濆瓨/媯绱?鍒犻櫎錛夎繖浜涚被鍒版暟鎹簱鐨勪竴浜涗唬鐮併傜敤Java鏈錛屾垜浠彨瀹働lain Old Java Object(a.k.a. a POJO)銆傝繖涓璞¢氬父浠h〃浜嗘暟鎹簱涓殑涓涓〃錛?i>鍏朵粬鐨勭被鍖呮嫭:

  • 涓涓暟鎹闂璞ata Access Object (a.k.a. a DAO), 涓涓?Interface鍜屼竴涓狧ibernate瀹炵幇
  • 涓涓?JUnit 綾繪潵嫻嬭瘯鎴戜滑鐨凞AO瀵硅薄
NOTE: 濡傛灉浣犱嬌鐢∕ySQL騫朵笖甯屾湜浣跨敤浜嬪姟 (寰堟湁鍙兘鏄繖涓儏鍐?,浣犻渶瑕佷嬌鐢↖nnoDB tables錛屼負浜嗗仛鍒拌繖涓鐐? 娣誨姞浠ヤ笅涓ゅ彞璇濆埌 (/etc/my.cnf 鎴栬?c:\Windows\my.ini)銆?鍏朵腑絎簩涓緗?(璁劇疆浣跨敤UTF-8瀛楃)鏄?.1.7+鎵蹇呴渶鐨勩?
[mysqld]
default-table-type=innodb
default-character-set=utf8
濡傛灉浣犱嬌鐢≒ostgreSQL騫朵笖鍦ㄦ垚鎵瑰鐞嗘椂寰楀埌璁稿榪鋒儜鐨勯敊璇紝璇曠潃鎶婂叧闂畠錛屾柟娉曟槸澧炲姞 <prop key="hibernate.jdbc.batch_size">0</prop> 鍒頒綘鐨?src/dao/**/hibernate/applicationContext-hibernate.xml鏂囦歡銆?

AppFuse浣跨敤Hibernate 浣滀負鎸佷箙鍖栧眰錛?Hibernate鏄竴濂楀璞?鍏崇郴Object/Relational (O/R)妗嗘灦錛屼粬鍏佽浣犳妸Java瀵硅薄鍜屾暟鎹簱涔嬮棿鑱旂郴璧鋒潵錛屽畠鍙互寰堟柟渚跨殑瀵逛綘鐨勫璞℃墽琛孋RUD (Create, Retrieve, Update, Delete)鎿嶄綔銆?

浣犱篃鍙互閫夋嫨浣跨敤iBATIS浣滀負鎸佷箙鍖栧眰錛屽鏋滆鍦ˋppFuse閲屽畨瑁卛BATIS錛?璇鋒煡鐪?tt>extras/ibatis涓殑README.txt銆傚鏋滀綘閫夋嫨iBATIS鑰屼笉鏄疕ibernate錛?甯屾湜浣犳湁鑷繁鐨勫師鍥犲茍涓旂啛鎮夎繖涓鏋訛紝鎴戜篃甯屾湜浣犺兘澶熼浼氬埌濡備綍灝嗘暀紼嬪簲鐢ㄥ埌iBATIS ;-)

瀛椾綋鎯緥 (榪涜涓?

瑕佸湪鍛戒護琛屼笅鎵ц鐨勫懡浠ゆ槸榪欎釜鏍峰瓙: ant test-all.
瀵圭洰褰曟垨鑰呭寘涓殑鏂囦歡鐨勫紩鐢ㄦ槸榪欎釜鏍峰瓙: build.xml.
鎴戝湪聯鐪熷疄涓栫晫聰涓疄闄呮搷浣滅殑鏂瑰紡鐢ㄨ摑鑹叉枩浣撹〃紺恒?/i>

璁╂垜浠戶緇湪AppFuse欏圭洰鐨勭粨鏋勪笅鍒涘緩涓涓柊鐨勫璞°丏AO鍜屾祴璇曘?

鐩綍

  • [1] 寤虹珛涓涓璞★紝騫朵笖浣?a class="external" >XDoclet鏍囪
  • [2] 浣跨敤Ant鏍規嵁瀵硅薄寤虹珛鏁版嵁搴撲腑鐨勮〃
  • [3] 鍒涘緩涓涓狣aoTest鏉ヨ繍琛孌AO瀵硅薄鐨凧Unit嫻嬭瘯
  • [4] 鍒涘緩涓涓柊鐨凞AO鏉ユ墽琛屽叧浜庤繖涓璞$殑CRUD鎿嶄綔
  • [5] 鍦╯pring閲岄厤緗甈erson鍜孭ersonDao
  • [6] 榪愯DaoTest

寤虹珛涓涓璞★紝騫朵笖浣淴Doclet鏍囪 [#1]

鎴戜滑瑕佸仛鐨勭涓浠朵簨鎯呭氨鏄緩绔嬩竴涓渶瑕佹寔涔呭寲鐨勫璞★紝鎴戜滑瑕佸湪src/dao/**/model鐩綍涓嬪緩绔嬩竴涓畝鍗曠殑Person瀵硅薄錛岃繖涓璞″寘鎷琲d銆乫irstName鍜宭astName灞炴с?

娉ㄦ剰錛?/b> 鐩存帴鎷瘋礉鏈暀紼嬬殑浠g爜 &#22312;FireFox&#19979;&#26080;&#25928;錛屼絾鎴戜滑鍙互閫氳繃CTRL+Click閫夊畾涓涓唬鐮佹墍鍦ㄧ殑宸ヤ綔鍖?OS X涓嬫槸Command+Click)錛岀劧鍚庡啀鎷瘋礉銆?/span>


package聽org.appfuse.model;

public聽class聽Person聽extends聽BaseObject聽{
聽聽聽聽private聽Long聽id;
聽聽聽聽private聽String聽firstName;
聽聽聽聽private聽String聽lastName;

聽聽聽聽/*
聽聽聽聽聽Generate聽your聽getters聽and聽setters聽using聽your聽favorite聽IDE:聽
聽聽聽聽聽In聽Eclipse:
聽聽聽聽聽Right-click聽->聽Source聽->聽Generate聽Getters聽and聽Setters
聽聽聽聽*/
}

榪欎釜綾誨繀欏繪墿灞?a class="external" >BaseObject錛岃岃繖涓狟aseObject鏈変笁涓娊璞℃柟娉?equals(), hashCode()鍜宼oString())闇瑕佷綘鍦≒erson綾婚噷瀹炵幇錛屽墠涓や釜鏄疕ibernate鐨勯渶瑕併備負浜嗗畬鎴愯繖閮ㄥ垎宸ヤ綔鏈綆鍗曠殑鏂瑰紡鏄嬌鐢?a class="external" >Commonclipse錛屽叧浜庤繖涓伐鍏鋒洿澶氱殑淇℃伅鍙互鍦?a class="external" >Lee Grey&#30340;&#32593;&#31449;閲岀湅鍒幫紝鍙﹀涓涓綘鍙互浣跨敤鐨凟clipse鐨勬彃浠舵槸Commons4E錛屾垜榪樻病鏈変嬌鐢ㄨ繃錛岃繖閲屼笉渚垮鍏跺姛鑳戒綔鍑鴻瘎璁恒?

濡傛灉浣犱嬌鐢?a class="external" >IntelliJ IDEA錛屼綘鍙互鑷姩浜х敓equals()鍜宧ashCode()錛屼絾娌℃湁toString()錛屾湁涓涓?ToStringPlugin鎻掍歡鍋氬緱闈炲父涓嶉敊

鐜板湪鎴戜滑宸茬粡鍒涘緩浜嗚繖涓狿OJO瀵硅薄錛屾垜浠渶瑕佸鍔燲Doclet鏍囪鏉ヤ駭鐢烪ibernate鐨勬槧灝勬枃浠訛紝榪欎簺鏂囦歡鐢ㄦ潵鏄犲皠瀵硅薄鈫?琛ㄥ拰灞炴?鍙橀噺) 鈫?瀛楁銆?

棣栧厛錛屾垜浠鍔?a class="external" >@hibernate.class 鏉ュ憡璇塇ibernate鎴戜滑灝嗚鍜岄偅涓〃浣滃叧鑱旓細


/**
*聽@hibernate.class聽table="person"
*/
public聽class聽Person聽extends聽BaseObject聽{

鎴戜滑涔熻澧炲姞涓婚敭鐨勬槧灝?鍚﹀垯XDoclet浼氬湪浜х敓鏄犲皠鏂囦歡鏃跺嚭閿?娉ㄦ剰鎵鏈夌殑@hibernate.*鏍囩蹇呴』鍦?b>getters'鐨凧avadocs閲岄潰銆?


聽聽聽聽/**
聽聽聽聽聽*聽@return聽Returns聽the聽id.
聽聽聽聽聽*聽@hibernate.id聽column="id"
聽聽聽聽聽*聽聽generator-class="increment"聽unsaved-value="null"
聽聽聽聽聽*/

聽聽聽聽public聽Long聽getId()聽{
聽聽聽聽聽聽聽聽return聽this.id;
聽聽聽聽}

鎴戜嬌鐢?tt>generator-class="increment"鑰屼笉浣跨敤generate-class="native" 鏄洜涓烘垜瀵規暟鎹簱浣跨敤"native"鏃?a class="wikipage" 鍊?/b>錛屾湰鏁欑▼浣跨敤increment銆?/i>

浣跨敤Ant鏍規嵁瀵硅薄浜х敓鏁版嵁搴撹〃[#2]

鍦ㄨ繖縐嶆儏鍐典笅,浣犲彲浠ラ氳繃榪愯ant setup-db鏉ュ緩绔媝erson琛紝榪欎釜浠誨姟浼氫駭鐢熸枃浠?tt>Person.hbm.xml騫朵笖浼氬緩绔嬪彨鍋?person"鐨勮〃錛屼粠Ant鐨勬帶鍒跺彴紿楀彛錛屼綘鍙互鐪嬪埌Hibernate涓轟綘寤虹珛鐨勮〃緇撴瀯鐨勫唴瀹廣?
[schemaexport] create table person (
[schemaexport]    id bigint not null,
[schemaexport]    primary key (id)
[schemaexport] );

濡傛灉浣犳煡鐪婬ibernate鐢熸垚鐨勬枃浠?tt>Person.hbm.xml錛屽彲浠ュ埌build/dao/gen/**/model鐩綍錛岃繖閲屾槸Person.hbm.xml鐨勫唴瀹?鐩墠鐨勫唴瀹?:


<?xml聽version="1.0"?>

<!DOCTYPE聽hibernate-mapping聽PUBLIC
聽聽聽聽"-//Hibernate/Hibernate聽Mapping聽DTD聽2.0//EN"聽
聽聽聽聽"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
聽聽聽聽<class
聽聽聽聽聽聽聽聽name="org.appfuse.model.Person"
聽聽聽聽聽聽聽聽table="person"
聽聽聽聽聽聽聽聽dynamic-update="false"
聽聽聽聽聽聽聽聽dynamic-insert="false"
聽聽聽聽>

聽聽聽聽聽聽聽聽<id
聽聽聽聽聽聽聽聽聽聽聽聽name="id"
聽聽聽聽聽聽聽聽聽聽聽聽column="id"
聽聽聽聽聽聽聽聽聽聽聽聽type="java.lang.Long"
聽聽聽聽聽聽聽聽聽聽聽聽unsaved-value="null"
聽聽聽聽聽聽聽聽>
聽聽聽聽聽聽聽聽聽聽聽聽<generator聽class="increment">
聽聽聽聽聽聽聽聽聽聽聽聽</generator>
聽聽聽聽聽聽聽聽</id>

聽聽聽聽聽聽聽聽<!--
聽聽聽聽聽聽聽聽聽聽聽聽To聽add聽non聽XDoclet聽property聽mappings,聽create聽a聽file聽named
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽hibernate-properties-Person.xml
聽聽聽聽聽聽聽聽聽聽聽聽containing聽the聽additional聽properties聽and聽place聽it聽in聽your聽merge聽dir.
聽聽聽聽聽聽聽聽-->

聽聽聽聽</class>

</hibernate-mapping>

鐜板湪鎴戜滑瑕佷負鍏跺畠鐨勫瓧孌?first_name, last_name)娣誨姞棰濆鐨?a class="external" >@hibernate.property鏍囩錛?


聽聽聽聽/**
聽聽聽聽聽*聽@hibernate.property聽column="first_name"聽length="50"
聽聽聽聽聽*/
聽聽聽聽public聽String聽getFirstName()聽{
聽聽聽聽聽聽聽聽return聽this.firstName;
聽聽聽聽}

聽聽聽聽/**
聽聽聽聽聽*聽@hibernate.property聽column="last_name"聽length="50"
聽聽聽聽聽*/
聽聽聽聽public聽String聽getLastName()聽{
聽聽聽聽聽聽聽聽return聽this.lastName;
聽聽聽聽}

鍦ㄨ繖涓緥瀛愰噷錛屾坊鍔?i>column灞炴х殑鍞竴鍘熷洜鏄洜涓鴻繖涓瓧孌靛悕涓庡畠鐨勫睘鎬у悕涓嶇浉鍚岋紝濡傛灉浠栦滑鐩稿悓錛屼綘娌℃湁蹇呰鏉ユ寚瀹?i>column灞炴э紝鍏充簬鍏跺畠鍙互浣跨敤鐨勬爣絳捐鐪?a class="external" >@hibernate.property銆?

鍐嶆榪愯ant setup-db鎶婃柊鍔犵殑灞炴у姞鍒版暟鎹簱琛ㄩ噷銆?

[schemaexport] create table person (
[schemaexport]    id bigint not null,
[schemaexport]    first_name varchar(50),
[schemaexport]    last_name varchar(50),
[schemaexport]    primary key (id)
[schemaexport] );

濡傛灉鏈熸湜淇敼瀛楁鐨勯暱搴︼紝淇敼@hibernate.property鏍囩鐨?i>length灞炴э紝濡傛灉甯屾湜鎶婂瓧孌墊敼涓哄繀娣誨瓧孌?NOT NULL)錛屽彲浠ュ鍔犲睘鎬ot-null="true"銆?

寤虹珛鏂扮殑DaoTest鏉ュ浣犵殑DAO榪愯JUnit嫻嬭瘯[#3]

娉ㄦ剰:浠嶢ppfuse鐗堟湰1.6.1+寮濮嬪寘鎷簡涓涓?a class="wikipage" >AppGen宸ュ叿錛屽彲浠ョ敤鏉ョ敓鎴愭湰鏁欑▼浣欎笅鐨勬墍鏈夌殑綾葷殑浠g爜錛屼笉榪囷紝鎴戜滑鏈濂借繕鏄厛榪囦竴閬嶆暀紼嬪啀浣跨敤榪欎釜宸ュ叿浜х敓浠g爜銆?/span>

鐜板湪錛屾垜浠鍒涘緩涓涓狣aoTest鏉ユ祴璇曟垜浠殑DAO鐨勫伐浣滐紝聯絳変細鍎柯旓紝浣犺錛屄撴垜浠繕涓嶆浘鍒涘緩DAO鍛紒聰錛屼綘璇村緱瀵廣傛棤璁哄浣曪紝鎴戝彂鐜?a class="external" >&#27979;&#35797;&#39537;&#21160;&#24320;&#21457;澶уぇ鐨勪績榪涗簡杞歡璐ㄩ噺錛屽湪璁稿騫撮噷鎴戜竴鐩磋涓?b>鍦ㄥ啓浠g爜涔嬪墠鍐欐祴璇?/b>鏄儭璇村叓閬擄紝榪欑湅璧鋒潵寰堟剼锠紝浣嗗綋鎴戝皾璇曚箣鍚庢垜璁や負榪欐牱闈炲父濂斤紝鐜板湪鎴戞寜鐓ф祴璇曢┍鍔ㄧ殑鏂瑰紡宸ヤ綔瀹屽叏鍥犱負鎴戝彂鐜拌繖鏍峰彲浠ュぇ澶ф彁楂樻垜杞歡寮鍙戠殑鏁堢巼銆?

寮濮嬶紝鎴戜滑鍦?tt>test/dao/**/dao鐩綍涓嬪緩绔嬬被PersonDaoTest.java錛岃繖涓被蹇呴』鎵╁睍BaseDaoTestCase錛岃孊aseDAOTestCase榪欎釜綾繪槸JUnit綾?a class="external" >TestCase鐨勫瓙綾伙紝榪欎釜綾葷敤鏉ュ姞杞?a class="external" >Spring鐨凙pplicationContext錛堝洜涓篠pring鎶婂悇涓眰緇戝畾錛夊拰鍗曞厓嫻嬭瘯綾誨悓涓鐩綍涓嬪悓浣犵殑嫻嬭瘯綾繪枃浠跺悓鍚嶇殑.properties鏂囦歡錛圧esourceBundle錛夛紝榪欎釜灞炴ф枃浠剁殑灞炴у彲浠ラ氳繃聯rb聰灞炴ф潵璁塊棶銆?

鎴戠粡甯告嫹璐?鎵撳紑鈫掑彟瀛樹負)涓涓凡瀛樺湪鐨勬祴璇?濡俇serDaoTest.java)錛岀劧鍚庢煡鎵?鏇挎崲 [Uu]ser涓篬Pp]erson錛屾垨鑰呬換浣曞叾瀹冮渶瑕佹浛鎹㈢殑鍐呭銆?/i>


package聽org.appfuse.dao;

import聽org.appfuse.model.Person;
import聽org.springframework.dao.DataAccessException;

public聽class聽PersonDaoTest聽extends聽BaseDaoTestCase聽{
聽聽聽聽
聽聽聽聽private聽Person聽person聽=聽null;
聽聽聽聽private聽PersonDao聽dao聽=聽null;

聽聽聽聽public聽void聽setPersonDao(PersonDao聽dao)聽{
聽聽聽聽聽聽聽聽this.dao聽=聽dao;
聽聽聽聽}
}

浠ヤ笂鏄垜浠嬌鐢↗Unit嫻嬭瘯鑰屽垵濮嬪寲鍜岄攢姣丳ersonDao鐨勫熀鏈唬鐮侊紝瀵硅薄聯ctx聰寮曠敤浜哠pring鐨凙pplicationContext錛屽畠鍦?a class="external" >BaseDaoTestCase綾葷殑闈欐佷唬鐮佸尯閲岃鍒濆鍖栥?

鐜板湪鎴戜滑闇瑕佸疄闄呮祴璇旸AO涓殑CRUD(create, retrieve, update, delete)鏂規硶錛屼負姝ゆ垜浠渶瑕佷負姣忎釜鏂規硶寤虹珛浠est錛堝叏閮ㄥ皬鍐欙級寮澶寸殑嫻嬭瘯鏂規硶錛屽彧瑕佽繖涓柟娉曟槸鍏叡鐨勶紝榪斿洖綾誨瀷鏄痸oid,瀹冧滑灝變細琚垜浠琤uild.xml涓殑Ant鐨?lt;junit>浠誨姟璋冪敤錛屽涓嬫槸涓浜涚畝鍗曠殑CRUD嫻嬭瘯錛岄渶瑕佹敞鎰忕殑涓鐐規槸鎵鏈夌殑鏂規硶錛堟垨鑰呭彨鍋氭祴璇曪級蹇呴』鏄嚜娌葷殑錛屾坊鍔犲涓嬩唬鐮佸埌鏂囦歡PersonDaoTest.java錛?


聽聽聽聽public聽void聽testGetPerson()聽throws聽Exception聽{
聽聽聽聽聽聽聽聽person聽=聽new聽Person();
聽聽聽聽聽聽聽聽person.setFirstName("Matt");
聽聽聽聽聽聽聽聽person.setLastName("Raible");

聽聽聽聽聽聽聽聽dao.savePerson(person);
聽聽聽聽聽聽聽聽assertNotNull(person.getId());

聽聽聽聽聽聽聽聽person聽=聽dao.getPerson(person.getId());
聽聽聽聽聽聽聽聽assertEquals(person.getFirstName(),聽"Matt");
聽聽聽聽}

聽聽聽聽public聽void聽testSavePerson()聽throws聽Exception聽{
聽聽聽聽聽聽聽聽person聽=聽dao.getPerson(new聽Long(1));
聽聽聽聽聽聽聽聽person.setFirstName("Matt");

聽聽聽聽聽聽聽聽person.setLastName("Last聽Name聽Updated");

聽聽聽聽聽聽聽聽dao.savePerson(person);

聽聽聽聽聽聽聽聽if聽(log.isDebugEnabled())聽{
聽聽聽聽聽聽聽聽聽聽聽聽log.debug("updated聽Person:聽"聽+聽person);
聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽assertEquals(person.getLastName(),聽"Last聽Name聽Updated");
聽聽聽聽}

聽聽聽聽public聽void聽testAddAndRemovePerson()聽throws聽Exception聽{
聽聽聽聽聽聽聽聽person聽=聽new聽Person();
聽聽聽聽聽聽聽聽person.setFirstName("Bill");
聽聽聽聽聽聽聽聽person.setLastName("Joy");

聽聽聽聽聽聽聽聽dao.savePerson(person);

聽聽聽聽聽聽聽聽assertEquals(person.getFirstName(),聽"Bill");
聽聽聽聽聽聽聽聽assertNotNull(person.getId());

聽聽聽聽聽聽聽聽if聽(log.isDebugEnabled())聽{
聽聽聽聽聽聽聽聽聽聽聽聽log.debug("removing聽person...");
聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽dao.removePerson(person.getId());

聽聽聽聽聽聽聽聽try聽{
聽聽聽聽聽聽聽聽聽聽聽聽person聽=聽dao.getPerson(person.getId());
聽聽聽聽聽聽聽聽聽聽聽聽fail("Person聽found聽in聽database");
聽聽聽聽聽聽聽聽}聽catch聽(DataAccessException聽dae)聽{
聽聽聽聽聽聽聽聽聽聽聽聽log.debug("Expected聽exception:聽"聽+聽dae.getMessage());
聽聽聽聽聽聽聽聽聽聽聽聽assertNotNull(dae);
聽聽聽聽聽聽聽聽}
聽聽聽聽}

鍦╰estGetPerson鏂規硶錛屾垜浠垱寤轟簡涓涓猵erson騫朵笖璋冪敤get鏂規硶錛屾垜閫氬父浼氬鍔犱竴鏉℃垜鎵闇瑕佺殑璁板綍鍒版暟鎹簱錛屽洜涓哄湪嫻嬭瘯榪愯涔嬪墠DBUnit浼氫負鏁版嵁搴撳噯澶囨祴璇曟暟鎹紝鎴戜滑鍙互綆鍗曠殑鍦╩etadata/sql/sample-data.xml閲屾坊鍔犳祴璇曟墍蹇呴』鐨勮褰?/i>

<table name='person'>
    <column>id</column>
    <column>first_name</column>
    <column>last_name</column>
    <row>
      <value>1</value>
      <value>Matt</value>
      <value>Raible</value>
    </row>
</table>
閫氳繃榪欑鏂瑰紡浣犲彲浠ュ湪testGetPerson鏂規硶閲屾秷闄ゅ垱寤烘柊綰綍鐨勫姩浣滐紝濡傛灉浣犳効鎰忕洿鎺ユ彃鍏ヨ褰曞埌鏁版嵁搴擄紙浣跨敤SQL鎴栬匞UI錛夛紝浣犲彲浠ョ敤ant db-export鍜?b>cp db-export.xml metadata/sql/sample-data.xml閲嶆柊鏋勫緩浣犵殑sample-data.xml鏂囦歡銆?/i>

鍦ㄤ笂闈㈢殑渚嬪瓙閲岋紝浣犲彲浠ョ湅鍒版垜浠皟鐢╬erson.set*(value)鏉ュ噯澶囨垜浠渶瑕佷繚瀛樼殑瀵硅薄錛屽湪榪欎釜渚嬪瓙閲屽緢綆鍗曪紝浣嗘槸褰撲綘瑕佹彃鍏?0鏉″繀娣誨瓧孌?not-null="true")鏃跺氨姣旇緝楹葷儲浜嗭紝榪欏氨鏄垜涓轟粈涔堣鍦˙aseDaoTestCase浣跨敤ResourceBundle鏂囦歡錛屽彧瑕佸湪PersonDaoTest.java鍚屼竴涓洰褰曞垱寤轟竴涓?tt>PersonDaoTest.properties騫朵笖鍦ㄩ噷闈㈠畾涔変綘鐨勫睘鎬у鹼細

鎴戦氬父鍙槸鍦↗ava閲岀‖緙栫爜錛屼絾鏄繖涓?properties瀵逛簬澶у璞″緢鏈夌敤銆?/i>
firstName=Matt
lastName=Raible
姝ゆ椂錛屼綘瑕侀氳繃璋冪敤BaseDaoTestCase.populate(java.lang.Object)鏂規硶鏉ュ噯澶囧璞★紝鑰屼笉鏄嬌鐢╬erson.set*銆?


person聽=聽new聽Person();
person聽=聽(Person)聽populate(person);

鍦ㄧ洰鍓嶆儏鍐典笅錛岃繕涓嶅彲浠ョ紪璇慞ersonDaoTest錛屽洜涓哄湪綾昏礬寰勯噷榪樻病鏈塒ersonDao.class錛屾垜浠渶瑕佸垱寤哄畠銆侾ersonDao.java鏄竴涓帴鍙o紝PersonDaoHibernate.java鏄畠鐨凥ibernate瀹炵幇錛岃鎴戜滑緇х畫錛屽紑濮嬪垱寤恒?

鍒涘緩涓涓瀵硅薄鎵цCRUD鎿嶄綔鐨勬柊DAO[#4]

椹笂錛屽湪src/dao/**/dao鐩綍閲屽緩绔婸ersonDao.java鎺ュ彛錛屽茍涓旀寚瀹氭墍鏈夊疄鐜扮被瑕佸疄鐜扮殑鍩烘湰CRUD鎿嶄綔錛屼負浜嗘樉紺烘柟渚匡紝鎴戝凡緇忓幓鎺変簡鎵鏈塉avaDocs銆?


package聽org.appfuse.dao;

import聽org.appfuse.model.Person;

public聽interface聽PersonDao聽extends聽Dao聽{
聽聽聽聽public聽Person聽getPerson(Long聽personId);
聽聽聽聽public聽void聽savePerson(Person聽person);
聽聽聽聽public聽void聽removePerson(Long聽personId);
}

娉ㄦ剰錛屽湪浠ヤ笂鐨勬柟娉曞0鏄庝笂騫舵病鏈塭xceptions璇存槑錛岃繖鏄洜涓?a class="external" >Spring浣跨敤RuntimeExceptions鏉ュ寘瑁笶xceptions鐨勬柟寮忥紝姝ゆ椂錛屼綘宸茬粡鍙互浣跨敤ant compile-dao鏉ョ紪璇?tt>src/dao鍜?tt>test/dao涓嬬殑鎵鏈夋簮鏂囦歡錛岀劧鑰屽綋浣犺繍琛?b>ant test-dao -Dtestcase=PersonDao榪涜嫻嬭瘯鏃訛紝浣犱細寰楀埌涓涓敊璇細No bean named 'personDao' is defined錛岃繖鏄竴涓猄pring鐨勯敊璇紝璇存槑浣犲繀欏誨湪applicationContext-hibernate.xml鎸囧畾涓涓悕瀛椾負personDAO鐨刡ean錛屽湪姝や箣鍓嶆垜浠渶瑕佸垱寤篜ersonDao鐨勫疄鐜扮被銆?

榪愯dao嫻嬭瘯鐨刟nt浠誨姟鍙仛test-dao錛屽鏋滀綘浼犻抰estcase鍙傛暟(鐢?b>-Dtestcase=name)錛屽畠浼氭煡鐪?tt>**/*${testcase}*鍏佽鎴戜滑浼犻扨erson銆丳ersonDao銆佹垨鑰匬ersonDaoTest浠ュ強鎵鏈変細鎵цPersonDaoTest鐨勭被銆?/i>

璁╂垜浠垱寤轟竴涓疄鐜癙ersonDao鐨勭被PersonDaoHibernate騫朵嬌鐢℉ibernate鏉et/save/delete榪欎釜Person瀵硅薄錛屼負姝わ紝鎴戜滑鍦?tt>src/dao/**/dao/hibernate鍒涘緩涓涓柊綾?tt>PersonDaoHibernate.java錛屽畠搴旇鎵╁睍BaseDaoHibernate錛屽茍涓斿疄鐜癙ersonDao銆?i>涓轟簡綆媧侊紝鐪佺暐Javadocs銆?/i>


package聽org.appfuse.dao.hibernate;

import聽org.appfuse.model.Person;
import聽org.appfuse.dao.PersonDao;
import聽org.springframework.orm.ObjectRetrievalFailureException;

public聽class聽PersonDaoHibernate聽extends聽BaseDaoHibernate聽implements聽PersonDao聽{

聽聽聽聽public聽Person聽getPerson(Long聽id)聽{
聽聽聽聽聽聽聽聽Person聽person聽=聽(Person)聽getHibernateTemplate().get(Person.class,聽id);

聽聽聽聽聽聽聽聽if聽(person聽==聽null)聽{
聽聽聽聽聽聽聽聽聽聽聽聽throw聽new聽ObjectRetrievalFailureException(Person.class,聽id);聽聽聽
聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽return聽person;
聽聽聽聽}

聽聽聽聽public聽void聽savePerson(Person聽person)聽{
聽聽聽聽聽聽聽聽getHibernateTemplate().saveOrUpdate(person);
聽聽聽聽}

聽聽聽聽public聽void聽removePerson(Long聽id)聽{
聽聽聽聽聽聽聽聽//聽object聽must聽be聽loaded聽before聽it聽can聽be聽deleted
聽聽聽聽聽聽聽聽getHibernateTemplate().delete(getPerson(id));
聽聽聽聽}
}

鐜板湪錛屽鏋滀綘榪愯ant test-dao -Dtestcase=PersonDao錛屼綘浼氬緱鍒板悓鏍風殑閿欒錛屾垜浠繀欏婚厤緗甋pring鏉ヨ瀹冪煡閬揚ersonDaoHibernate鏄疨ersonDao鐨勫疄鐜幫紝鍚屾牱鐨勶紝鎴戜滑涔熻鍛婅瘔瀹冭繕鏈変釜Person瀵硅薄銆?

閰嶇疆Spring涓殑Person鍜孭ersonDao [#5]

棣栧厛鎴戜滑瑕佸憡璇塖pring鎵鏈塇ibernate鏂囦歡鐨勪綅緗紝涓烘錛屾墦寮src/dao/**/dao/hibernate/applicationContext-hibernate.xml錛屽湪浠ヤ笅浠g爜鍧楁坊鍔?tt>"Person.hbm.xml"銆?


<property聽name="mappingResources">聽
聽聽聽聽<list>聽
聽聽聽聽聽聽聽聽<value>org/appfuse/model/Person.hbm.xml</value>聽
聽聽聽聽聽聽聽聽<value>org/appfuse/model/Role.hbm.xml</value>聽
聽聽聽聽聽聽聽聽<value>org/appfuse/model/User.hbm.xml</value>
聽聽聽聽</list>聽
</property>聽

鐜板湪鎴戜滑闇瑕佹坊鍔犱竴浜沊ML鏁版嵁鏉ョ粦瀹歅ersonDaoHibernate鍒癙ersonDao錛屼負姝わ紝娣誨姞濡備笅浠g爜鍒版枃浠跺簳閮細


<!--聽PersonDao:聽Hibernate聽implementation聽-->聽
<bean聽id="personDao"聽class="org.appfuse.dao.hibernate.PersonDaoHibernate">聽
聽聽聽聽<property聽name="sessionFactory"><ref聽local="sessionFactory"/></property>聽
</bean>聽

浣犱篃鍙互涓?lt;bean>浣跨敤autowire="byName"灞炴ф潵娑堥櫎"sessionFactory"灞炴?/i>銆?span style="COLOR: blue">浠庝釜浜烘潵璁詫紝鎴戝枩嬈㈠湪XML鏂囦歡閲屼繚鐣欏璞$殑渚濊禆銆?/i>

榪愯DaoTest[#6]

淇濆瓨鎵鏈変慨鏀圭殑鏂囦歡錛岃繍琛?b>ant test-dao -Dtestcase=PersonDao銆?

Yeah Baby, Yeah:BUILD SUCCESSFUL
Total time: 9 seconds


涓嬩竴閮ㄥ垎:Part II:&#21019;&#24314;&#31649;&#29702;&#22120;Manager - 鏄竴涓緩绔嬬被浼間簬Session Facades鐨勶紝浣嗕笉浣跨敤EJBs鐨勪笟鍔acade璇存槑錛岃繖涓猣acades鐢ㄦ潵寤虹珛浠庡墠绔埌DAO灞傜殑鑱旂郴銆?



]]>
主站蜘蛛池模板: 中文字幕成人免费视频| 好男人资源在线WWW免费| 桃子视频在线观看高清免费完整 | 国产啪精品视频网站免费尤物 | 黄色网址免费在线观看| 亚洲А∨精品天堂在线| 老司机午夜在线视频免费| 免费99热在线观看| 猫咪免费观看人成网站在线| 亚洲午夜精品一级在线播放放 | 亚洲精品乱码久久久久久按摩| 岛国精品一区免费视频在线观看 | 亚洲熟妇少妇任你躁在线观看无码 | 99re热精品视频国产免费| 亚洲国产精品免费视频| 国产精品成人免费福利| 99999久久久久久亚洲| 日本人的色道www免费一区| 免费无码一区二区| 亚洲精品无码精品mV在线观看| 久久国产乱子免费精品| 亚洲综合色7777情网站777| 国产麻豆剧传媒精品国产免费| 国产精品高清免费网站| 亚洲国产二区三区久久| 男男AV纯肉无码免费播放无码| 久久亚洲中文字幕无码| 亚洲精品无码永久在线观看你懂的| 99久9在线|免费| 亚洲1区2区3区精华液| 中文字幕精品亚洲无线码二区| 最近免费中文字幕大全高清大全1| 亚洲乱妇老熟女爽到高潮的片 | 亚洲日本国产精华液| 日本成人在线免费观看| 最好免费观看高清在线 | GOGOGO高清免费看韩国| 亚洲美女一区二区三区| 国产免费啪嗒啪嗒视频看看| 日韩免费在线观看视频| 亚洲AV综合永久无码精品天堂|