| At line 182 changed 1 line. |
| Para começar, crie uma classe PessoaDaoTest.java no diretório test/dao/**/dao. Esta classe deve estender [BaseDaoTestCase|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/dao/BaseDAOTestCase.java.html], que já existe neste pacote. Esta classe pai é usada para carregar ApplicationContext do [Spring's|http://www.springframework.org] (Spring une todas as camadas), e para automaticamente carregar um arquivo .properties (ResourceBundle) que tem o mesmo nome que sua classe *Test.class. Neste exemplo, se você colocar um arquivo PessoaDAOTest.properties no mesmo diretório que PessoaDAOTest.java, este arquivo de propriedades estará disponível via uma variável rb. |
| Para começar, crie uma classe PessoaDaoTest.java no diretório test/dao/**/dao. Esta classe deve estender [BaseDaoTestCase|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/dao/BaseDAOTestCase.java.html], sub-classe da classe [AbstractDependencyInjectionSpringContextTests|http://www.springframework.org/docs/api/org/springframework/test/AbstractDependencyInjectionSpringContextTests.html] do Spring que já existe neste pacote. Esta classe pai é usada para carregar ApplicationContext do [Spring's|http://www.springframework.org] (Spring une todas as camadas), e para (opcionalmente) carregar um arquivo .properties (ResourceBundle) que tem o mesmo nome que sua classe *Test.class. Neste exemplo, se você colocar um arquivo PessoaDAOTest.properties no mesmo diretório que PessoaDAOTest.java, este arquivo de propriedades estará disponível via uma variável rb. |
| At line 198 changed 3 lines. |
| protected void setUp() throws Exception { |
| super.setUp(); |
| dao = (PersonDao) ctx.getBean("personDao"); |
| public void setPersonDao(PersonDao dao) { |
| this.dao = dao; |
| At line 202 removed 5 lines. |
|
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| dao = null; |
| } |
| At line 210 changed 1 line. |
| O código que você vê acima é o que precisamos para um teste JUnit básico, que inicializa e destrói nosso PessoaDAO. O objeto ctx é uma referência ao ApplicationContext do Spring, o qual é inicializado em um bloco estático da classe [BaseDaoTestCase's|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/dao/BaseDaoTestCase.java.html] class. |
| O código que você vê acima é o que precisamos para um teste de integração Spring básico que inicializa e destrói nosso PessoaDAO. Spring irá usar autowiring (auto-ligamento) por tipo para chamar o método ''setPersonDao()'' e atribuir o bean "personDao" como uma dependência desta classe. |
| At line 249 added 1 line. |
|
| At line 306 changed 1 line. |
| Primeiro, crie a interface PessoaDAO.java no diretório src/dao/**/dao e especifique os métodos CRUD básicos para qualquer classe de implementação. Eliminei as partes JavaDocs na classe abaixo apenas por propósito de visualização.'' |
| Primeiro, crie a interface PessoaDAO.java no diretório src/dao/**/dao e especifique os métodos CRUD básicos para qualquer classe de implementação. Eliminei as partes JavaDocs na classe abaixo apenas por propósito de visualização. |
| At line 314 removed 2 lines. |
| import java.util.List; |
|
| At line 317 removed 3 lines. |
|
| public List getPeople(Person person); |
|
| At line 321 changed 3 lines. |
|
| public void savePerson(Object person); |
|
| public void savePerson(Person person); |
| At line 338 removed 3 lines. |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
|
| At line 328 added 1 line. |
| import org.springframework.orm.ObjectRetrievalFailureException; |
| At line 344 removed 3 lines. |
| import java.util.List; |
|
|
| At line 349 changed 1 line. |
| private Log log = LogFactory.getLog(PersonDaoHibernate.class); |
| public Person getPerson(Long id) { |
| Person person = (Person) getHibernateTemplate().get(Person.class, id); |
| At line 351 changed 3 lines. |
| public List getPeople(Person person) { |
| return getHibernateTemplate().find("from Person"); |
| } |
| if (person == null) { |
| throw new ObjectRetrievalFailureException(Person.class, id); |
| } |
| At line 355 changed 2 lines. |
| public Person getPerson(Long id) { |
| return (Person) getHibernateTemplate().get(Person.class, id); |
| return person; |
| At line 359 changed 1 line. |
| public void savePerson(Object person) { |
| public void savePerson(Person person) { |
| At line 364 changed 2 lines. |
| Object person = getHibernateTemplate().load(Person.class, id); |
| getHibernateTemplate().delete(person); |
| // object must be loaded before it can be deleted |
| getHibernateTemplate().delete(getPerson(id)); |
| At line 370 removed 21 lines. |
|
| Você notará aqui que não estamos fazendo nada com o parâmetro pessoa. Isto é somente um place holder por enquanto no futuro você pode filtrar suas propriedades usando [Hibernate's Query Language|http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html] (HQL) ou usando [Criteria Queries|http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html]. |
|
| ''Um exemplo usando Criteria Query:'' |
|
| [{Java2HtmlPlugin |
|
| Example example = Example.create(person) |
| .excludeZeroes() //exclude zero valued properties |
| .ignoreCase(); //perform case insensitive string comparisons |
| try { |
| return getSession().createCriteria(Person.class) |
| .add(example) |
| .list(); |
| } catch (Exception e) { |
| throw new DAOException(e); |
| } |
| return new ArrayList(); |
|
| }] |
|
| At line 404 removed 2 lines. |
| <value>org/appfuse/model/UserCookie.hbm.xml</value> |
| <value>org/appfuse/model/UserRole.hbm.xml</value> |
| At line 434 changed 1 line. |
| ''Next Up:'' __Part II:__ [Creating new Managers|CreateManager] - A HowTo for creating [Business Delegates|http://java.sun.com/blueprints/corej2eepatterns/Patterns/BusinessDelegate.html] that talk to the database tier (DAOs) and the web tier (Struts Actions). |
| ''Próxima:'' __Parte II:__ [Criando novos Managers|CreateManager_pt] - Um "HowTo" para criar [Business Delegates|http://java.sun.com/blueprints/corej2eepatterns/Patterns/BusinessDelegate.html] que comunicam-se com a camada de banco de dados (DAOs) e web (Spring Controllers). |