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