| At line 323 added 76 lines. | 
|  | 
| ;:''运行dao测试的ant任务叫做__test-dao__,如果你传递testcase参数(用__-Dtestcase=name__),它会查看{{**/*${testcase}*}}允许我们传递Person、PersonDao、或者PersonDaoTest以及所有会执行PersonDaoTest的类。'' | 
|  | 
| 让我们创建一个实现PersonDao的类PersonDaoHibernate并使用Hibernate来get/save/delete这个Person对象,为此,我们在{{src/dao/**/dao/hibernate}}创建一个新类{{PersonDAOHibernate.java}},它应该扩展[BaseDaoHibernate|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/dao/BaseDAOHibernate.java.html],并且实现PersonDAO。为了简洁,省略Javadocs。'' | 
|  | 
| [{Java2HtmlPlugin | 
|  | 
| 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__,你会得到同样的错误,我们必须配置Spring来让它知道PersonDaoHibernate是PersonDAO的实现,同样的,我们也要告诉它还有个Person对象。 | 
|  | 
| !!配置Spring中的Person和PersonDao [#5] | 
|  | 
| 首先我们要告诉Spring所有Hibernate文件的位置,为此,打开{{src/dao/**/dao/hibernate/applicationContext-hibernate.xml}},在以下代码块添加{{"Person.hbm.xml"}}。 | 
|  | 
| [{Java2HtmlPlugin | 
|  | 
| <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> | 
| <value>org/appfuse/model/UserCookie.hbm.xml</value> | 
| </list> | 
| </property> | 
| }] | 
|  | 
| 现在我们需要添加一些XML数据来绑定PersonDaoHibernate到PersonDao,为此,添加如下代码到文件底部: | 
|  | 
| [{Java2HtmlPlugin | 
|  | 
| <!-- PersonDao: Hibernate implementation --> | 
| <bean id="personDao" class="org.appfuse.dao.hibernate.PersonDaoHibernate"> | 
| <property name="sessionFactory"><ref local="sessionFactory"/></property> | 
| </bean> | 
| }] | 
|  | 
| ;:''你也可以为<bean>使用__autowire="byName"__属性来消除"sessionFactory"属性''。%%(color: blue)''从个人来讲,我喜欢在XML文件里保留对象的依赖。''%% | 
|  | 
| !!运行DaoTest[#6] | 
| 保存所有修改的文件,运行__ant test-dao -Dtestcase=PersonDao__。 | 
|  | 
| __Yeah Baby, Yeah:__ | 
| %%(color:green)BUILD SUCCESSFUL\\ | 
| Total time: 9 seconds%% | 
|  | 
| ---- | 
|  | 
| ''下一部分:'' __Part II:__ [创建管理器Manager|CreateManager] - 是一个建立类似于[Session Facades|http://java.sun.com/blueprints/patterns/SessionFacade.html]的,但不使用EJBs的业务Facade说明,这个facades用来建立从前端到DAO层的联系。 |