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层的联系。 |