Universidade Federal de Pernambuco
Centro de Informática - Sistemas de Informação
IF992 - Programação 2 :: Lista de Exercícios 10
Prof. Vinicius Cardoso Garcia
Exercício 1 – Criação da classe Persistente POJO.
1. Este laboratório utilizará o projeto “cursohbm” criado no laboratório anterior.
2. No pacote src Implemente o Pojo de Aluno conforme abaixo:
import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; public class Aluno {
private static final long serialVersionUID = 1L; private Long id;
private String nome; private String pai; private String mae; private Date nascimento; public Aluno() {
}
public Aluno(long id) { this();
this.id = id; }
public Long getId() { return id; }
public void setId(Long id) { this.id = id;
}
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome;
this.mae = mae; }
public Date getNascimento() { return nascimento; }
public void setNascimento(Date nascimento) { this.nascimento = nascimento;
} }
Criação dos arquivos hbm
3. Para cada Pojo, criaremos o seu respectivo mapeamento ORM do hiberante.
4. Na pasta src crie o arquivo Aluno.hbm.xml para o Pojo Aluno:
○ Clique com o botão direito sob JavaSource – Selecione o Menu New → Other→
Hibernate → Hibernate XML Mapping File , e clique next
○
Configure a criação do hbm conforme abaixo e clique next:
○
Incremente o “Aluno.hbm.xml” conforme exemplo abaixo
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="Aluno" table="aluno"> <id column="id_aluno" name="id" >
<generator class="increment" /> </id>
<property name="nome" type="string" length="100" /> <property name="pai" type="string" length="100" /> <property name="mae" type="string" length="100" /> <property name="nascimento" type="date" />
</class> </hibernate-mapping>
5. Associe os HBMs ao hibernate.cfg.xml.
○ Insira a linha destacada no arquivo hibernate.cfg.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> <property
name="hibernate.connection.url">jdbc:hsqldb:hsql://127.0.0.1/escola</property> <property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property>
<property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property>
<mapping resource="Aluno.hbm.xml"/>
</session-factory> </hibernate-configuration>
Implementação do DAO
6. Crie a classe AlunoDAO em default package: import org.hibernate.Session;
import org.hibernate.Transaction; public class AlunoDAO {
//Método responsável por inserir um aluno public void inserir(Aluno aluno) {
//Abrindo uma sessão
Session sessao = HibernateUtil.getSession(); //Iniciando uma transação
Transaction transaction = sessao.beginTransaction(); sessao.save(aluno);
transaction.commit(); sessao.close();
} }
Sua camada de acesso a dados está implementada com um método responsável por inserir um aluno. Nos próximos módulos iremos incrementar essa camada. A camada esta pronta para ser testada!
Exercício 2 – Execução e Testes
1. Para realizar os testes, utilizaremos o banco de dados HSQLDB disponível no
material de aula. (arquivo if992-15-Lista_exercicios_10-hsqldb.zip);
2. Inicie-o em modo servidor da seguinte forma:
● Se ambiente windows:
○ Execute a arquivo: ./hsqldb/run.bat
● Se ambiente linux:
○ Execute a arquivo: ./hsqldb/run.sh
● A console deverá permanecer aberta conforme figura abaixo:
3. Para testar a camada de persistência, criaremos uma classe TestCase AlunoDAOTest que testará as principais funções da classe AlunoDAO.
○ Clique com o botão direito sob a classe HibernateUtil – Selecione o Menu New →
Other→ Java→JUnit→ Junit Test Case.
○ Configure a criação do JUnit conforme abaixo:
○ Clique no botão Finish e aguarde a criação da classe de teste.
4. Para acessar os métodos estáticos da classe Assert do JUnit faça a seguinte
importação:
import static org.junit.Assert.*;
5. Crie uma instância de AlunoDAO na classe de Teste.
private AlunoDAO alunoDAO = new AlunoDAO();6. Crie o seguinte test para testar a inclusão do aluno:
@Testpublic void test_01_Inclusao() { Aluno obj_Aluno = new Aluno(); obj_Aluno.setNome("Aluno 01"); obj_Aluno.setNascimento(new Date()); obj_Aluno.setMae("Mae do aluno 01"); obj_Aluno.setPai("Pai do aluno 01"); alunoDAO.inserir(obj_Aluno); assertTrue(obj_Aluno.getId() >= 0); }
7. Rode o teste e verifique o resultado.
Exercício 3 – Criação da classe Persistente POJO.
1. Este laboratório utilizará o projeto “cursohbm” criado no laboratório anterior.
2. No pacote src Implemente o Pojo de Aluno conforme abaixo:
import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name = "tb_pessoa")
@SequenceGenerator(name = "sq_pessoa", sequenceName = "sq_pessoa") public class Pessoa {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_pessoa") @Column(name = "id_pessoa")
private Long id;
@Column(name = "nome", length = 30, nullable = true) private String nome;
@Column(name = "ativo", nullable = true) protected Boolean ativo;
@Temporal(TemporalType.DATE)
@Column(name = "dt_criacao", nullable = true) private Date nascimento;
public Long getId() { return id; }
public void setId(Long id) { this.id = id;
}
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome;
}
public Date getNascimento() { return nascimento; }
public void setNascimento(Date nascimento) { this.nascimento = nascimento;
}
public Boolean getAtivo() { return ativo; }
public void setAtivo(Boolean ativo) { this.ativo = ativo;
}
}
3. Associe a classe Pessoa ao mapeamento do hibernate.cfg.xml.
○ Insira a linha destacada
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory> <property
name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> <property
name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost/escola</property> <property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="show_sql">true</property>
<property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping class="Pessoa" />
</session-factory> </hibernate-configuration>
Implementação do DAO
4. Crie uma classe da acesso a dados (DAO) aos objetos pessoa chamado PessoaDAO em default package:
import org.hibernate.Session; import org.hibernate.Transaction; public class PessoaDAO {
/**
* Inclusao de Pessoas * @param pessoa */
public void inserir(Pessoa pessoa) {
//Obtendo uma sessao
Session sessao = HibernateUtil.getSession();
//Iniciando uma transacao
Transaction transaction = sessao.beginTransaction();
sessao.save(pessoa); transaction.commit(); sessao.close(); }
}
Sua camada de acesso a dados está implementada com um método responsável por inserir um aluno. Nos próximos módulos iremos incrementar essa camada. A camada esta pronta para ser testada!
Exercício 4 – Execução e Testes
1. Para testar a camada de persistência, criaremos uma classe TestCase PessoaDAOTest que testará as principais funções da classe PessoaDAO.
○ Clique com o botão direito sob a classe HibernateUtil – Selecione o Menu New →
Other→ Java→JUnit→ Junit Test Case.
2. Para acessar os métodos estáticos da classe Assert do JUnit faça a seguinte importação: import static org.junit.Assert.*;
3. Crie uma instância de AlunoDAO na classe de Teste. private PessoaDAO pessoaDAO = new PessoaDAO(); 4. Crie o seguinte test para testar a inclusão do aluno:
@Test
public void test01Inclusao() { Pessoa pessoa = new Pessoa(); pessoa.setNome(""); pessoa.setNascimento(new Date()); pessoa.setAtivo(true); pessoaDAO.inserir(pessoa); assertTrue(pessoa.getId() >= 0); }