igrpweb
C
ONTEÚDO
Enquadramento ... 3
1
Criando uma conexão de BD no eclipse. ... 4
2
Mapeamento com ferramenta nativa do Eclipse ... 11
2.1 Habilitando o JPA ... 11
2.2 Mapeando as Classes ... 16
3
Mapeamento com JBoss Tools ... 25
3.1 Instalando a Ferramenta de Mapeamento ... 25
3.2 Mapeando a BD em um package DAO ... 28
ENQUADRAMENTO
Mapeamento DAO é o processo de representação de uma Base de Dados em um package Java de modo a permitir a Persistência de Dados numa camada intermediária entre a BD e a aplicação, melhorando a performance da aplicação e facilitando o trabalho do programador, que então não precisará se preocupar com querys.
Cada tabela passa, então, a ser representada por uma classe Java devidamente configurada onde devem estar especificadas as relações existentes entre as tabelas da BD.
Existem algumas ferramentas que facilitam esse mapeamento e o objetivo deste documento é guiar o desenvolvedor na geração dessas classes e configuração de sua aplicação, uma vez que o igrpweb utiliza a persistência de dados implementada com o framework Hibernate.
Este processo deve ser realizado para que possamos utilizar a interação com a BD utilizando package/class
DAO abordada no documento Interagindo com a Base de Dados.
Neste documento utilizamos o Eclipse com o IGRP Template importado, para fazermos o mapeamento. Entretanto, quem usa o igrpweb pode criar um projeto novo com a finalidade de mapear a BD e posteriormente através do File Editor do framework criar o package, adicionar as classes a este e a lista de classes a ser utilizada ao ficheiro de conexão a BD como mostraremos mais a adiante.
1 CRIANDO UMA CONEXÃO DE BD NO ECLIPSE.
Vamos primeiramente ver como criar uma conexão de Base de Dados no Eclipse, que possa ser utilizada no mapeamento através desse IDE abordadas mais a frente neste documento.
Alteramos a perspetiva para Database Development, Fig 1 e Fig 2.
Fig 2
Click direito sobre Database Connections e escolhemos New – Fig 3.
Na janela seguinte, Fig 6, clicamos sobre a linha indicada e depois sobre a aba JAR List, removemos o JAR que vem por defeito, Fig 7, e adicionamos o ficheiro que baixamos anteriormente – Fig 8 e clicamos Ok.
Fig 8
Fig 9
A conexão criada aparecerá no painel de navegação do Eclipse, Fig 10. A partir desse momento, basta-nos mudar a perspetiva para Java EE, Fig 11 [ou Fig 1 e Fig 2], e mapear a BD com um dos métodos abaixo.
2 MAPEAMENTO COM FERRAMENTA NATIVA DO ECLIPSE
Para ilustrar o mapeamento com a ferramenta nativa do Eclipse temos no IGRP Template, que importamos do GitHub, uma aplicação – demo – com um package – dao – e uma conexão de BD –
demo_db_conn – correspondente ao ficheiro demo_db_conn.demo.cfg.xml, ver Fig 12. A aplicação e
respetiva conexão foram criadas através do IGRP Studio rodando sobre o Apache Tomee EE plus sincronizando com o Eclipse.
Nossas classes ficarão no package dao e deverão ser listadas no ficheiro da conexão.
2.1 Habilitando o JPA
O primeiro passo é habilitar o JPA no nosso projeto. Para isso, fazemos click direito sobre o IGRP Template e abrimos a janela de propriedades, Fig 13.
Fig 13
Na janela que se abre vamos para Project Facets, Fig 14, selecionamos o ckeckbox JPA. Então, clicamos
Fig 14
Na janela que se abre, Fig 15, escolhemos Disable Library Configuration e clicamos ,
voltando à janela anterior.
2.2 Mapeando as Classes
Depois de habilitar o JPA, fazemos click direito sobre o package dao, criado para receber as classes e vamos para New -> JPA Entities from Tables, Fig 17.
Na janela que se abre, Fig 18, selecionamos a conexão que criamos no capítulo Criando uma Conexão de
BD. Em seguida clicamos sobre o botão [2] para ativar a conexão, selecionamos o schema e, então,
as tabelas da nossa BD são listadas abaixo. Selecionamos as que queremos mapear e clicamos .
Na janela que se segue, Fig 19, podemos configurar as relações entre as tabelas. Clicando sobre cada
relação podemos alterar as suas configurações. Podemos também adicionar relações clicando sobre .
Tendo feito as configurações clicamos .
Na janela seguinte, Fig 20, configuramos as propriedades do mapeamento. Se quisermos geração automática das chaves primárias das tabelas escolhemos auto [de preferência], ou outra consoante o caso. A propriedade Associations fetch deve continuar com a configuração padrão, podendo ser alterada se tivermos algum conhecimento sobre ORM [Mapeamento objeto-relacional], pois tem um impacto de peso na performance da aplicação, definindo que dados e quando os dados são solicitados à BD para serem armazenados na camada de persistência.
Ainda nessa janela, Fig 20, clicamos , para selecionarmos a supercalsse BaseActiveRecord [para que nossas classes possam herdar métodos já programados para uso do Hibernate], consoante a Fig 21, e assim as nossas classes herdarem métodos para uso do Hibernate já implementados, valtando à janela de configurações, Fig 22.
Fig 22
Repare que cada classe estende a superclasse nosi.base.activeRecord.BaseActiveRecord<T>.
Então na janela da Fig 23 clicamos sobre caba tabela da BD assinalados pelo numero 1 e alteramos a linha de sua declaração, assinalada pelo numero 2, substituindo a letra T pelo nome da classe. Isso deve ser
feito para todas as classes.
Ao clicamos , Fig 23, as classes são geradas, ficando no package que criamos para o fim como podemos ver na Fig 24.
Essas classes são também são listadas no ficheiro persistence.xml na tag persistence-unit, Fig 25, gerado automaticamente. Essa lista de classes deve ser copiada para dentro da tag session-factory do nosso ficheiro de conexão de BD demo_db_conn.demo.cfg.xml, Fig 26,que havíamos criado através do Application Builder.
Devemos ter atenção a diferença existente entre as duas tags.
Tag persistence-unit – ficheiro persistence, gerado automaticamente.
<persistence-unit name="IGRP-Template">
<class>nosi.webapps.demo.dao.Department</class> <class>nosi.webapps.demo.dao.Employee</class> </persistence-unit>
Tag session-factory – ficheiro de conexão
<session-factory>
<mapping class="nosi.webapps.demo.dao.Department"/> <mapping class="nosi.webapps.demo.dao.Employee"/> </session-factory>
Depois de copiar as classes a tag persistence-unit deve ser alterada para ficar assim:
<persistence-unit name="IGRP-Template">
<exclude-unlisted-classes>true</exclude-unlisted-classes> </persistence-unit>
Fig 25
3 MAPEAMENTO COM JBOSS TOOLS
3.1 Instalando a Ferramenta de Mapeamento
Vamos para o Eclipse Marketplace, procuramos o JBoss Tools e instalamo-lo, conforme as Fig 27 e Fig 28.
Na janela seguinte Fig 29 desmarcamos tudo, selecionamos Hibernate Tools e confirmamos. Aceitamos os termos e terminamos a instalação – Fig 30.
Aguardamos o processo de instalação terminar e reiniciamos o Eclipse.
Fig 31
3.2 Mapeando a BD em um package DAO
Para fazer o mapeamento vamos utilizar a aplicação Demo que criamos no IGRP Template. Nela criamos o package dao para receber as classes e a conexão demo_db_conn [criada através do Application Builder do framework] onde ficarão listadas as classes geradas.
Logo criamos uma aplicação de nome Demo e criamos um package [dao], onde ficarão as classes Java. Agora mudamos a perspetiva para Hibernate – Fig 1 e Fig 33.
Fig 33
Escolhemos a aplicação e a package e clicamos ok – Fig 35.
Fig 35
Na janela seguinte, Fig 37, criamos uma nova configuração de Hibernate, assinalada pelo numero 1,
escolhemos a pasta e o package, clicamos , para criar um xml, Fig 38, onde serão listadas
as classes geradas.
Fig 37
Conforme a Fig 39, escolhemos a pasta onde queremos que o ficheiro fique e clicamos next.
Na janela seguinte, Fig 40, clicamos sobre o botão , escolhemos as tabelas que queremos mapear,
adicionamos à lista e clicamos , voltando à janela de configuração, Fig 41.
Em seguida selecionamos a aba exporters, Fig 41, selecionamos os checkbox Domain code e DAO code,
clicamos , e depois gerando então as classes.
Fig 41
tag session-factory do nosso ficheiro de conexão – demo_db_conn.demo.cfg.xml, devendo ficar com o seguinte aspeto:
<session-factory>
<mapping class="nosi.webapps.demo.dao.Department"/> <mapping class="nosi.webapps.demo.dao.Employee"/> </session-factory>
Fig 43
Para finalizar em cada classe fazemos as alterações seguintes: 1. Importar o BaseActiveRecord:
import nosi.base.ActiveRecord.BaseActiveRecord;
4 MAPEAMENTO COM NETBEANS IDE
Para quem prefere uma ferramenta diferente da acima abordada, o IDE NetBeans também oferece uma ferramenta nativa para mapeamento de bases de dados. Vamos agora ver esse processo.
Começamos por abrir o IDE e criar uma aplicação Demo com um package dao, para onde mapearemos as tabelas da nossa BD. Em seguida fazemos click direito sobre o package criado e escolhemos New -> Entity
Classes from Database [Fig 44].
Fig 44
Na janela que se abre, Fig 45, escolhemos New Database Connection no combobox Database Connection e, então abre-se uma nova janela para o efeito, Fig 46.
Na janela da Fig 46 escolhemos o tipo de BD e clicamos . Passamos para um formulário, Fig 47, onde configuramos nossa conexão com a BD, com as respetivas credencias.
Tendo inserido os dados clicamos sobre o Botão e, se tivermos sucesso, click .
Na janela seguinte, Fig 48, selecionamos o schema e depois inserimos o nome pretendido para a conexão,
Fig 49, e ao clicar , somos levados de volta à página de mapeamento de BD, utilizando a conexão
recém criada, Fig 50.
Na janela de mapeamento de classes aparecem listadas as tabelas da base de dados correspondente à conexão criada. O passo seguinte é adicionar as tabelas que pretendemos mapear à lista de tabelas selecionadas, Fig 50.
A não ser que tenhamos algum conhecimento sobre ORM, e assim possamos alterar as configurações das
Entity Classes a ser geradas, passamos para a etapa seguinte através do botão .
Em seguida nas opções de mapeamento podemos escolher o tipo de coleção e [na caso preferimos List]
e clicamos , Fig 52. Com isso as classes são geradas e ficam disponíveis no package dao, Fig 53,
que criamos anteriormente.
Fig 52
Notemos que as configurações realizadas nas Fig 51 e Fig 52 sempre podem ser alteradas, atendendo à necessidades do desenvolvedor.
Fig 53
Cada classe gerada deve estender a classe BaseActiveRecord, para poder herdar os métodos já programados para uso do Hibernate, logo devemos fazer o import correspondente. Devemos também ajustar o nome do package da cada classe ao do dao da aplicação.
Logo, a classe Department, por exemplo, deve ficar assim:
package nosi.webapps.demo.dao; import java.io.Serializable; import java.util.List; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import nosi.base.ActiveRecord.BaseActiveRecord; @Entity @Table(name = "department") @XmlRootElement @NamedQueries({
private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Integer id; @Basic(optional = false) @Column(name = "name")
private String name;
@OneToMany(mappedBy = "departmentId")
private List<Employee> employeeList;
public Department() {}
/* More Java code Here*/
}
Para terminar o processo precisamos apenas criar um package dao, na nossa aplicação [Fig 54] e dentro
colocar as classes mapeadas. Estas devem ser listadas dentro tag <session-factory> do ficheiro de
conexão, devendo este ficar com o seguinte aspeto:
<session-factory>
<mapping class="nosi.webapps.demo.dao.Department"/> <mapping class="nosi.webapps.demo.dao.Employee"/> </session-factory>