Vous êtes sur la page 1sur 14

Revista Eletrnica da Faculdade Metodista Granbery

http://re.granbery.edu.br - ISSN 1981 0377


Curso de Sistemas de Informao - N. 6, JAN/JUN 2009

TUTORIAL SOBRE A CONSTRUO DE APLICAES


EMPREGANDO JAVA, HIBERNATE E MySQL
Elio Lovisi Filho 1
Gustavo Mendes de Castro 2

RESUMO
Este artigo apresenta o desenvolvimento de um exemplo de sistema para manuteno de
dados de departamentos. Apresentam-se aqui as tcnicas e as ferramentas empregadas nesse
desenvolvimento, bem como os resultados obtidos durante a realizao do mesmo. Esse
sistema foi desenvolvido empregando-se o paradigma da Orientao a Objetos, o Java, a IDE
NetBeans 6.5, o framework Hibernate e o SGBD MySQL.
PALAVRAS-CHAVE: JAVA, MVC, DAO, HIBERNATE E MYSQL.
ABSTRACT
This article presents the development of an example system for maintenance of data from
departments. The techniques and the tools used in this development are presented here, as
well as the results gotten during his accomplishment. This system was developed using the
Object-Oriented paradigm, the Java, the NetBeans 6.5 IDE, the Hibernate framework and the
MySQL DBMS .
KEY-WORDS: JAVA, HIBERNATE, MVC, DAO,E MYSQL.
1 - Mestre em Informtica pelo Instituto Tecnolgico de Aeronutica, Professor do curso de
Sistemas de Informao da Faculdade Metodista Granbery e Analista de Sistemas da
Prefeitura de Juiz de Fora. Email:eliolovisi.professor@gmail.com
2 - Graduado em Sistemas de Informao pela Faculdade Metodista Granbery e programador
da Prefeitura de Juiz de Fora. Email:gustavomanso@gmail.com

1. INTRODUO
Apresenta-se aqui o desenvolvimento de um exemplo acadmico de caso de uso, que
implemente as operaes bsicas de acesso a um banco de dados, empregando a abordagem
MVC e o padro de projetos DAO. No ser apresentada a implementao de todas as
funes de um aplicativo profissional.
A abordagem MVC - Modelo, Viso e Controle (Model, View and Controller) define
como os componentes da aplicao iro interagir entre si. Este padro de arquitetura divide os
objetos em trs conjuntos:

o Modelo (Model), composto por objeto de entidade da aplicao;

a Viso (View), composta por objetos de apresentao na tela; e

o Controlador (Controller), que possui objetos que definem a maneira como a


interface do usurio reage s entradas do mesmo. (GAMMA et al., 2000).

Alm disso, para a manipulao dos dados do sistema foram empregados objetos de
acesso, conhecidos como DAO (Data Access Object), que permitem que as regras de negcio
sejam separadas das regras para acesso aos dados, de forma que sejam criadas classes
exclusivas para o acesso ao SGBD (XAVIER, 2007).
A aplicao desenvolvida empregar a linguagem de programao JAVA, que uma
linguagem de programao orientada a objetos. No entanto, a maioria dos SGBD's utilizados
atualmente emprega o modelo relacional. Logo, existe a necessidade de realizar a traduo
entre os dois modelos. Para tanto ser empregado o framework Hibernate. (KING, 2007)
As ferramentas empregadas no desenvolvimento deste tutorial foram:

a IDE NetBeans 6.5, disponvel para donwload em http://www.netbeans.org/;

o SGBD MySQL, que pode ser obtido no site: http://www.mysql.com/; e

a ferramenta SQLyog para a administrao do SGBD, disponvel no site http://


www.webyog.com. No entanto, qualquer ferramenta para administrao de um
SGBD MySQL poder ser empregada.

Nos prximos itens sero apresentadas as atividades necessrias para a criao de um


exemplo de aplicativo Java que acesse um banco de dados MySQL empregando o framework
Hibernate, utilizando tambm os padres MVC e DAO.
2. PREPARANDO O AMBIENTE
Conforme citado anteriormente, para o desenvolvimento desse aplicativo ser
2

empregado o SGBD MySQL. Para esse tutorial foi criado um banco de dados chamado
exemplohibernate, com o usurio root e a senha vazia.
Nesse banco crie a tabela departamento utilizando o script abaixo:
CREATE TABLE `departamento` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(60) default NULL,
`area` varchar(60) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
Na ferramenta NetBeans 6.5 crie um novo projeto chamado ExemploHibernate, e
inclua no seu pacote de cdigo fonte (Source Package), os seguintes pacotes: DAO, model,
control e view .(GONALVES,2006)
Para este aplicativo ser necessria a utilizao das bibliotecas do Hibernate JPA e do
driver JDBC que far o acesso ao banco. Logo, ser necessria a construo de Librarys no
NetBeans para o armazenamento e organizao destes arquivos. Para isso, deve-se criar uma
Library para o driver JDBC do MySQL.
O NetBeans permite a construo de Librarys atravs da opo Library Manager no
menu Tools. Ao escolher esta opo a janela Library Manager ser aberta e basta clicar no
boto New Library... no canto inferior esquerdo da mesma como na figura a seguir.

Figura 01. Gerncia de bibliotecas no NetBeans.

Na figura anterior, selecione a opo New Library... para criar a biblioteca


JDBCMySql, adicionando o arquivo: mysql-connector-java-3.1.11-bin.jar (ou uma verso
3

mais recente), disponvel em http://www.findjar.com.


Adicione as bibliotecas (Hibernate JPA e JDBCMySql) ao projeto. Para isso, v ao
inspetor de Projetos e clique com o boto direito sobre o item bibliotecas (Libraries) e escolha
Adicionar Bibliotecas (Add Library), conforme a figura a seguir.

Figura 02. Adicionando bibliotecas ao projeto no NetBeans.

No pacote padro (default package) crie um arquivo de configurao (New Other


Properties File) chamado hibernate.properties, e insira o cdigo abaixo:
hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://localhost:3306/exemplohibernate
hibernate.connection.username root
hibernate.connection.password
hibernate.show_sql false
hibernate.format_sql false
Observe que neste arquivo so estabelecidos os parmetros de configurao da
conexo do aplicativo com o SGBD. A propriedade url define a localizao e a porta do banco
de dados. J as propriedades username e password definem o usurio e a senha de acesso ao
banco de dados.
3. CRIANDO A CLASSE DE MODELO (MODEL)
No pacote model crie a classe Departamento, com um construtor padro (vazio) e com
os seguintes atributos encapsulados:

id (Integer)

nome (String)

area (String)

Agora, ser necessrio mapear a classe Departamento da aplicao tabela


departamento do SGBD. Isso necessrio para indicar qual(is) tabela(s) do banco de dados
corresponde(m) classe de entidade, empregando-se um mapeamento que indica essa
correspondncia.(KING, 2007)
4

Nesse exemplo faremos o mapeamento por meio de anotaes na classe. Altere a


classe Departamento conforme a figura abaixo.

Figura 03. Mapeamento da classe de modelo

As anotaes (precedidas por '@') indicam o mapeamento entre a classe e a tabela do


banco de dados. Algumas importaes do pacote javax.persistence sero necessrias nesse
ponto.
4. CONSTRUINDO A FACTORY CLASS
Para evitar a dependncia entre o aplicativo principal e a implementao concreta do
DAO, iremos empregar o padro Factory Method, no qual um objeto responsvel pela
criao de outros, fabricando-os. (XAVIER, 2007)
Sendo assim, nosso prximo passo consiste em construir a classe FactoryClass para
gerncia do Banco de Dados a ser utilizado. Para isso, crie uma nova classe no pacote DAO e
d o nome para ela de FactoryClass. Em seguida, digite o cdigo mostrado a seguir.
public static void criarDAOFactory() {
HibernateConfiguracao configuracao = new HibernateConfiguracao();
configuracao.criaSessionFactory();
}
Nesse ponto, algumas linhas do seu cdigo iro ficar marcadas de vermelho. No
mesmo pacote, crie a classe HibernateConfiguracao, com o seguinte cdigo.
public class HibernateConfiguracao {
private static SessionFactory sessionFactory;
public HibernateConfiguracao() {
}
public Session openSession() {
return sessionFactory.openSession();
}
public void criaSessionFactory() {
if (sessionFactory == null) {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Departamento.class);
sessionFactory = cfg.buildSessionFactory();
}
}
}
5

Neste momento ser necessrio importar algumas classes do Hibernate.


5. CRIANDO O DAO
A classe DAO ir permitir o acesso do sistema ao SGBD configurado. Para tanto,
iremos utilizar um DAO Genrico que possui os mtodos bsicos de acesso a um banco de
dados.
Incluir;
Alterar;
Excluir;
Consultar;
Listar.
Para a execuo dessas operaes bsicas, pode-se empregar alguns mtodos
genricos, como os listados abaixo. Para tanto, crie uma classe chamada DAOGenerico (no
pacote DAO), com o cdigo exibido a seguir.(KING, 2007)
public class DAOGenerico {
protected HibernateConfiguracao hibernateConfiguracao;
public DAOGenerico() {
hibernateConfiguracao = new HibernateConfiguracao();
}
public void gravar(Object obj) throws HibernateException {
Session session = hibernateConfiguracao.openSession();
Transaction transaction = session.beginTransaction();
session.save(obj);
transaction.commit();
session.close();
}
public void alterar(Object obj) throws HibernateException {
Session session = hibernateConfiguracao.openSession();
Transaction transaction = session.beginTransaction();
session.update(obj);
transaction.commit();
session.close();
}
public void excluir(Object obj) throws HibernateException {
Session session = hibernateConfiguracao.openSession();
Transaction transaction = session.beginTransaction();
session.delete(obj);
transaction.commit();
session.close();
}
public List carregarTudoOrdenado(Class clas, String ordem)
HibernateException {
Session session = hibernateConfiguracao.openSession();
Criteria criteria = session.createCriteria(clas);
criteria.addOrder(Order.asc(ordem));
List lista = criteria.list();
session.close();

throws

return lista;
}
public Object carregarUm(int id, Class clas) throws HibernateException {
Session session = hibernateConfiguracao.openSession();
Transaction transaction = session.beginTransaction();
Criteria criteria = session.createCriteria(clas);
criteria.add(Expression.eq("id", id));
Object obj = criteria.uniqueResult();
transaction.commit();
session.close();
return obj;
}
}
Para esta classe, sero necessrias as seguintes importaes:
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
No mesmo pacote, crie o DAODepartamento, herdando do DAOGenerico e com um
construtor prprio.
6. CONSTRUINDO O CONTROLADOR (CONTROLLER)
No pacote control, crie uma nova classe, chamada CtrManterDepartamento. Nessa
classe crie um atributo utilizando o seguinte cdigo:
DAODepartamento acessohibernatedepto = new DAODepartamento();
Aps isso inclua o cdigo a seguir.
public CtrManterDepartamento( ){
}
public int gravarDepartamento(Departamento departamento) {
try {
acessohibernatedepto.gravar(departamento);
return 1;
} catch (HibernateException e) {
e.printStackTrace();
return 2;
}
}
7. CONSTRUINDO O FORMULRIO (VIEW)
Num primeiro momento, iremos criar um formulrio que permita somente a incluso
dos departamentos. Para isso, no pacote view, crie um novo JFrame, chamado
7

FrmManterDepartamento. (GONALVES,2006)
Insira um JButton Incluir (jBtnIncluir) e dois JtextField (jTxtNome, jTxtArea) para
o nome e a rea do departamento. Aps isso, crie 2 atributos no cdigo do formulrio,
conforme o apresentado abaixo.
CtrManterDepartamento ctrManterDepartamento = new CtrManterDepartamento();
Departamento depart = new Departamento();
Crie um evento para o boto (Events Action actionPerformed) e insira o cdigo a
seguir no evento criado.
depart.setNome(jTxtNome.getText());
depart.setArea(jTxtArea.getText());
if (ctrManterDepartamento.gravarDepartamento(depart) == 1) {
JOptionPane.showMessageDialog(this, "Objeto persistido");
} else {
JOptionPane.showMessageDialog(this, "Objeto no persistido");
}
A seguir, mostrado um exemplo deste JFrame.

Figura 04. Tela para manuteno de dados

8. CONSTRUINDO O A TELA INICIAL DA APLICAO


No pacote padro, crie mais um JFrame, chamado Principal, inclua nele um Jbutton
(chamado jBtnExibirDepartamento), torne essa classe a inicial do sistema e faa as seguintes
alteraes na classe:
//construtor
public Principal() {
FactoryClass.criarDAOFactory();
initComponents();
}
//mtodo main
public static void main(String args[]) {
Principal telaPrincipal = new Principal();
telaPrincipal.setVisible(true);
8

telaPrincipal.setExtendedState(MAXIMIZED_BOTH);
}
Agora crie um evento actionPerformed no boto e insira o seguinte cdigo.
FrmManterDepartamento telaDepartamento = new FrmManterDepartamento();
telaDepartamento.setVisible(true);
telaDepartamento.setLocationRelativeTo(this);
Nesse momento o aplicativo j deve permitir a incluso de departamentos. Execute o
programa para avaliar os resultados. Se desejar, inclua o cdigo para limpar os campos, caso o
departamento seja inserido corretamente. Alm disso, incluir tambm cdigos para validao
dos atributos, observando o tamanho mximo dos registros no banco de dados.
Por enquanto, para visualizar o resultado da execuo, utilize a ferramenta SQLyog.
9. LISTANDO OS OBJETOS
Para permitir a visualizao dos dados, insira um componente JList no formulrio
FrmManterDepartamento e faa as seguintes alteraes:
Aumente a largura da lista;
Altere o nome para jLstDepartamentos;
Remova todos os itens de sua propriedade model; e
Altere a propriedade selectionMode para Single.
O formulrio deve ficar com a seguinte aparncia.

Figura 05. Tela para manuteno de dados alterada para permitir a listagem dos objetos.
9

A seguir, inclua um novo evento no JFrame (Window windowActiveted), insira o


cdigo no evento criado e importe as classes necessrias.
DefaultListModel listModel = new DefaultListModel();
List listDepartamento = new ArrayList();
listDepartamento = ctrManterDepartamento.carregarDepartamentos();
if (listDepartamento != null) {
Iterator i = listDepartamento.iterator();
while (i.hasNext()) {
Departamento deptList = (Departamento) i.next();
listModel.addElement(deptList);
}
jLstDepartamentos.setModel(listModel);
} else {
JOptionPane.showMessageDialog(this, "No foi possvel recuperar
todos os departamentos");
}
O sistema ainda ir indicar que falta um mtodo no controlador. Para corrigir este
problema, inclua o cdigo abaixo no controlador e faa as importaes necessrias.
public List carregarDepartamentos() {
try {
return acessohibernatedepto.CarregarTudoOrdenado
(Departamento.class, "nome");
} catch (HibernateException e) {
return null;
}
}
Finalmente, insira o mtodo abaixo na classe Departamento do pacote model.
public String toString() {
return this.getNome();
}
Observe que a lista foi preenchida com objetos da classe departamento. Logo, a
consulta aos dados de um objeto ficou muito mais simples.
Para exibir os dados de um objeto selecionado na lista, crie um novo evento para a
lista (Mouse mouseClicked) e acrescente o cdigo a seguir ao evento:
depart = (Departamento) jLstDepartamentos.getSelectedValue();
if (depart != null) {
jTxtNome.setText(depart.getNome());
jTxtArea.setText(depart.getArea());
} else {
JOptionPane.showMessageDialog(this, "Objeto no Encontrado!");
}
Nesse momento, a execuo do programa dever permitir a incluso dos objetos da
classe departamento, e tambm a listagem e consulta dos mesmos.

10

10. EXCLUINDO OS OBJETOS


Iremos agora permitir a excluso de departamentos. Para tanto, inclua um novo
Jbutton, altere sua propriedade Text para Excluir e sua propriedade Name para
jBtnExcluir.
Aps isso, crie um evento para o novo boto (Events Action actionPerformed) e
insira o cdigo abaixo.
depart = (Departamento) jLstDepartamentos.getSelectedValue();
if (depart != null) {
if (ctrManterDepartamento.excluirDepartamento(depart)) {
JOptionPane.showMessageDialog(this, "Objeto Excludo");
} else {
JOptionPane.showMessageDialog(this, "Objeto no excludo");
}
} else {
JOptionPane.showMessageDialog(this, "Selecione o Objeto");
}
Novamente o sistema ir indicar que falta um mtodo no controlador. Logo, insira o
cdigo abaixo no controlador.
public boolean excluirDepartamento(Departamento departamento) {
try {
acessohibernatedepto.excluir(departamento);
return true;
} catch (HibernateException e) {
e.printStackTrace();
return false;
}
}
11. ALTERANDO OBJETOS
Agora vamos possibilitar a alterao de um objeto selecionado na lista. Para tanto,
inclua um novo boto na tela, conforme exibido na figura a seguir.
Modifique sua propriedade texto para Alterar, a sua propriedade Name para
jBtnAlterar e crie um novo evento (Events Action actionPerformed) para o novo boto.

11

Figura 06. Tela para manuteno de dados permitindo a listagem, incluso, alterao e excluso
de objetos.

Insira o cdigo abaixo no evento criado para o boto.


depart = (Departamento) jLstDepartamentos.getSelectedValue();
if (depart != null) {
depart.setNome(jTxtNome .getText());
depart.setArea(jTxtArea .getText());
if (ctrManterDepartamento.alterarDepartamento(depart)) {
JOptionPane.showMessageDialog(this, "Objeto persistido");
} else {
JOptionPane.showMessageDialog(this, "Objeto no persistido");
}
} else {
JOptionPane.showMessageDialog(this, "Objeto no localizado");
}
Aps isso, altere o controlador inserindo o cdigo abaixo.
public boolean alterarDepartamento(Departamento departamento) {
try {
acessohibernatedepto.alterar(departamento);
return true;
} catch (HibernateException e) {
e.printStackTrace();
return false;
}
12

}
Finalmente, execute o programa e observe os resultados. Se desejar, limpe os campos
da tela aps a alterao e a excluso do objeto.

12. CONSIDERAES FINAIS


O objetivo deste artigo foi apresentar o desenvolvimento de um exemplo de
sistema computacional multi-camada empregando a linguagem de programao Java, o
framework Hibernate e o SGBD MySQL.
A utilizao da IDE NetBeans apresentou bons resultados, agilizando o processo
de desenvolvimento. Alm disso, o emprego do framework simplificou o processo de
persistncia dos dados. A classe

DAOGenerico foi desenvolvida buscando-se manter o

encapsulamento. Sendo assim, ela poder ser facilmente reutilizada em outros sistemas.
Prope-se a aplicao, em trabalhos futuros, de outras formas de interao entre
os objetos das camadas do sistema, em especial com a aplicao do MVP (Passive View,
Supervising Controller). Pode-se tambm desenvolver outras formas de interao com o
usurio, aplicando-se diferentes tecnologias como Web ou Mobile.

13

13. REFERNCIAS BIBLIOGRFICAS


DEITEL, H. M.. Java Como Programar. 6a ed. So Paulo: Prentice Hall, 2007.
GAMMA, E; HELM, R; JOHNSON, R; VLISSIDES, J. Padres de projeto: solues
reutilizveis de software orientado a objetos, Porto Alegre: Bookman, 2000.
GONALVES, Edson. Dominando NetBeans. Rio de Janeiro: Cincia Moderna, 2006.
KING G. Java Persistence com Hibernate. Rio de Janeiro: Cincia Moderna, 2007.
XAVIER, K.; SENGER, Y. Abstract Factory Aplicado. Rio de Janeiro, Java Magazine,
edio 50, p. 40-45, 2007.

14

Vous aimerez peut-être aussi