Utilizando Swing com Hibernate

Documentos relacionados
Utilizando Swing com JPA/Hibernate

DW2 Desenvolvimento Web 2

Vamos falar de Hibernate?

Introdução ao Hibernate. Hibernate Mapeamento com Anotação. Projeto Desktop Uma Classe. Objetivo. Programas Utilizados

POO Programação Orientada a Objetos

Este Tutorial básico irá nos orientar como salvar e carregar uma imagem a partir de banco de dados (MySQL), utilizando Hibernate e Java.

Conexão com Banco de Dados

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

Desenvolvimento Web com Java. Sérgio Lopes Caelum -

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

Parte II Persistência entre Modelos de Dados

Mapeamento Lógico/Relacional com JPA

Particionamento de Banco com o Hibernate Shards

Curso de Java. Acesso a banco de dados através do Hibernate. Todos os direitos reservados Klais

Hibernate na sua aplicação JavaWeb

Mapeamento Objeto-Relacional (Object Relational Mapping)

Criando uma aplicação web

Spring Framework. Parte 04 transações

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 9- Introdução ao JDBC

Mapeamento Objeto-Relacional

JPA Java Persistence API. Prof. Ramon Chiara

Exercícios de fixação: Listas

HIBERNATE Criando um projeto em Java + Hibernate do zero

Java - Conexão ao Banco de Dados usando JDBC

JPA: Persistência padronizada em Java

Desvendando o Hibernate

TUTORIAL INTEGRAÇÃO SPRING, HIBERNATE E MYSQL

Leonardo Gresta Paulino Murta

Utilizando Swing com Banco de Dados

DATA ACCESS OBJECT (DAO)

Unidade 12: Programação de Banco de Dados com Java Prof. Daniel Caetano

Tutorial Hibernate + Vraptor para projetos Restful.

Lista de Exercícios da disciplina Aplicações de Linguagem de Programação Orientada a objetos

PLATAFORMA SIGA RIO DAS VELHAS MANUAL DO CÓDIGO FONTE

Declaração de Construtores em Java

Programação Orientada a Objetos II


Mapeando Relacionamentos Entre Classes com Anotações Hibernate Por: Raphaela Galhardo Fernandes Gleydson de Azevedo F. Lima

Persistência de dados com o

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Departamento de Computação Curso de Análise e Desenvolvimento de Sistemas Modelagem Conceitual de Dados

Linguagem de Programação II Implementação

Injeção de Dependências e Spring

JDBC com Banco de Dados Standalone

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel


Desenvolvimento para Web em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM Lamarck Heinsch Mestrando PPGI/CT/UFSM

JDBC JDBC. JDBC - Arquitetura. JDBC Arquitetura Pacote Java.sql. Java Database Connectivity JDBC PostgreSQL

Testes Unitários com JUnit

PERSISTÊNCIA DE OBJETOS USANDO O FRAMEWORK HIBERNATE COM ESTUDO DE CASO

Introdução. Configuração. Padrão POJO. Framework Pesistência de. Mapeamento Annotation. Objetos. Persistência. Java. Objetos. Prof.

Continuação... Criando a Interface e adiante

TUTORIAL SOBRE A CONSTRUÇÃO DE APLICAÇÕES EMPREGANDO JAVA, HIBERNATE E MySQL

Tratando exceções em Java

Enums em Java: utilização e persistência

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

JPA Demonstração das Estratégias Optimistic Locking e Pessimistic Locking

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO.

INTRODUÇÃO A PERSISTÊNCIA DE DADOS COM HIBERNATE E ANNOTATION

Série Rações Semanais JPA & Hibernate Rogério Araújo

Como criar um banco de dados usando o mysql

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano

Conheça mais da Caelum. Cursos Online Casa do Código. Blog Caelum blog.caelum.com.br

Conexão Java Mini-curso Hibernate

Notas de Aula 09: Tratamento de exceções

Persistência de Classes em Tabelas de Banco de Dados

Refatoração Melhorando o sistema e preparando pra a Web

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Banco de Dados. Aula 03. Prof. Diemesleno Souza Carvalho

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

[versão para impressão] Link original: comp=24763 Conhecendo o PL/SQL

Projeto Final Curso de Java Básico

Transcrição:

Programando com Java Artigo http://mballem.wordpress.com/ Utilizando Swing com Hibernate Utilizando a SessionFactory Autor Marcio Ballem: é formado em Sistemas de Informação e possui certificação Oracle Certified Professional, Java SE 6 Programmer. Trabalhou profissionalmente com desenvolvimento em Delphi 7 e Java JEE. Introdução Este tutorial segue a série de tutoriais Utilizando Swing com Banco de Dados (http://mballem.wordpress.com/2011/02/21/utilizando-swing-com-banco-de-dados/) e Utilizando Swing com JPA/Hibernate (http://mballem.wordpress.com/2011/02/24/utilizando-swing-com-jpahibernate/). Continuaremos utilizando o framework Hibernate, para a persistência com banco de dados, mas desta vez ao invés de utilizarmos objetos EntityManager da especificação JPA, iremos utilizar a SessionFactory do Hibernate. Utilizaremos desta vez o banco de dados Derby no modo Standalone, mas quem preferir pode utilizar o MySql ou outro banco de dados de sua preferência, é só lembrar de alterar os dados para conexão no arquivo de configuração e adicionar o drive JDBC no projeto.. O padrão MVC também será seguido, então caso não tenha lido os tutoriais anteriores, seria importante ler a respeito do que é o padrão MVC. 1. Arquivos necessários Para o desenvolvimento deste tutorial serão necessárias algumas bibliotecas referentes ao Hibernate e a JPA, e mais algumas que necessitam ser utilizadas como algumas dependências. E também é claro do Driver JDBC do Derby que pode ser baixado aqui: http://db.apache.org/derby/derby_downloads.html. No tutorial estou utilizando a versão 10.7.1.1, então baixe o arquivo db-derby-10.7.1.1-bin.zip. Veja as bibliotecas necessárias na figura 1.

Figura 1 - Bibliotecas 1 Montei um pacote com todas as bibliotecas e as disponibilizei para download neste link (http://www.megaupload.com/?d=uhr7g6wi), adicione a elas o driver JDBC do Derby. 2. Hibernate e a SessionFactory A SessionFactory é uma interface do próprio Hibernate, seria uma fabrica de sessões onde teremos uma única SessionFactory e várias Session s. Podemos configurar uma SessionFactory através de três formas, programaticamente, ou através de um arquivo do tipo Properties e por último um arquivo do tipo XML, o qual será usado neste tutorial. Quando todos os mapeamentos forem analisados pelo org.hibernate.cfg.configuration, a aplicação deve obter uma factory para as instâncias do org.hibernate.session. Veremos isso mais a frente. 3. Arquivo hibernate.cfg.xml Quando utilizamos o Hibernate precisamos configurar o framework com informações para seu uso. Como já foi citado na sessão 2, utilizaremos estas configurações através de um arquivo XML, nomeado como hibernate.cfg.xml. O Hibernate por padrão procura por esse arquivo no classpath da aplicação, então iremos criá-lo no seguinte diretório, veja na figura 2. Como iremos criar um banco de dados Derby no modo standalone, precisamos adicionar na propriedade hibernate.connection.url um comando que irá dizer ao Derby que vamos criar o banco em tempo de execução. Esse comando é, create=true, como veremos na listagem 1. Após a criação do banco de dados é aconselhavél setar essa configuração para false. Desta vez então, não iremos criar uma classe para a geração do banco de dados, como foi feito no tutorial anterior Utilizando Swing com JPA/Hibernate (http://mballem.wordpress.com/2011/02/24/utilizando-swing-comjpahibernate/).

Figura 2 Projeto O banco de dados quando criado, criará um diretório chamado agenda e dentro deste diretório será criado todos os arquivos utilizados pelo Derby referente a base de dados. Para ver onde será criado este diretório, veja na figura 2, acima do diretório lib. Não é necessário você criar o diretório agenda, ele será criado automaticamente quando a aplicação for executada. Todas as configurações devem ser adicionadas dentro da tag <session-factory>, inclusive o local onde se encontra o mapeamento das tabelas, no nosso caso a classe que contém as anotações referentes a tabela Contatos. Listagem 1. Arquivo hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect"> org.hibernate.dialect.derbydialect <property name="hibernate.connection.url"> jdbc:derby:agenda;create=true <property name="hibernate.connection.driver_class"> org.apache.derby.jdbc.embeddeddriver <property name="hibernate.connection.username"> derby <property name="hibernate.connection.password"> derby <property name="hibernate.format_sql"> true <property name="hibernate.show_sql"> true <property name="hibernate.use_sql_comments">

false <!-- Disable the second-level cache --> <property name="hibernate.cache.provider_class"> org.hibernate.cache.nocacheprovider <!-- DB schema will be updated if needed --> <property name="hbm2ddl.auto"> update <property name="hibernate.current_session_context_class"> thread <!-- mapeamentos --> <mapping class="br.mb.tutorialhibernate.model.contato"/> </session-factory> </hibernate-configuration> 4. Tabela contatos A tabela Contatos será criada pelo próprio Hibernate através das anotações e da configuração no arquivo hibernate.cfg.xml. O que indica ao hibernate que ele deve criar o banco de dados é a propriedade hbm2dll.auto. Quando setada como create ela cria o banco novamente sempre que iniciamos a aplicação, quando setada como update ele ira criar na primeira vez, e apenas atualizar o banco de dados caso seja criada uma nova classe com mapeamento de outra tabela, mas tome cuidado, algumas vezes o Hibernate acaba apagando os dados das tabelas já existentes quando utilizamos o update. Se essa geração as vezes não funciona para alguns bancos de dados, então irei disponibilizar na listagem 2 uma classe para geração do banco de dados, algo semelhante ao que foi feito no tutorial de JPA/Hibernate. Listagem 2. Gerando o banco de dados. package br.mb.tutorialhibernate.agenda; import br.mb.tutorialhibernate.model.contato; import org.hibernate.cfg.configuration; import org.hibernate.tool.hbm2ddl.schemaexport; public class GeraBanco { public static void main(string args[]) { //adicionar no addclass a classe que ira criar ou alterar a tabela Configuration configuration = new Configuration().addAnnotatedClass(Contato.class); // lê seu hibernate.cfg.xml configuration.configure(); SchemaExport se = new SchemaExport(configuration); se.create(true, true); // aqui o primeiro true gera o script de criação do banco, // o segundo se voce quer executar ele no banco ou não

Quem utilizar um banco de dados no modo servidor, como o Mysql ou outros, algumas vezes será necessário criar o banco de dados manualmente no gerenciador, para então o Hibernate criar as tabelas. 5. Classe de Conexão Nossa classe de conexão agora trabalhará com SessionFactory e não EntityManager, como pode ser visto na listagem 3. Listagem 3. Classe HibernateUtil package br.mb.tutorialhibernate.dao; import org.hibernate.session; import org.hibernate.sessionfactory; import org.hibernate.cfg.configuration; public class HibernateUtil { private static SessionFactory SESSION_FACTORY; static { try { // Create the SessionFactory from hibernate.cfg.xml SESSION_FACTORY = new Configuration().configure().buildSessionFactory(); catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); public static Session getsession() { return SESSION_FACTORY.openSession(); Será criada uma SessionFactory através do objeto Configuration e será criado um método getsession(), onde abrimos uma sessão através SessionFactory. Uma sessão será aberta sempre que tivermos uma interação com o banco de dados. 6. Classe GenericDao Vamos criar uma classe genérica para os métodos insert, update e delete, e algumas consultas que podem ser padrão para várias entidades, veja na listagem 4. Listagem 4. Classe GenericDao package br.mb.tutorialhibernate.dao; import org.hibernate.session; import org.hibernate.criterion.restrictions; import java.io.serializable; import java.lang.reflect.parameterizedtype;

import java.util.list; public class GenericDao<T extends Serializable> { private final Session session; private final Class<T> persistentclass; public GenericDao() { this.session = HibernateUtil.getSession(); this.persistentclass = (Class<T>) ((ParameterizedType) getclass().getgenericsuperclass()).getactualtypearguments()[0]; public Session getsession() { return session; protected void save(t entity) { try { getsession().gettransaction().begin(); getsession().save(entity); getsession().gettransaction().commit(); catch (Throwable t) { getsession().gettransaction().rollback(); t.printstacktrace(); finally { close(); protected void update(t entity) { try { getsession().gettransaction().begin(); getsession().update(entity); getsession().gettransaction().commit(); catch (Throwable t) { getsession().gettransaction().rollback(); t.printstacktrace(); finally { close(); protected void delete(t entity) { try { getsession().gettransaction().begin(); getsession().delete(entity); getsession().gettransaction().commit(); catch (Throwable t) { getsession().gettransaction().rollback(); t.printstacktrace(); finally { close(); public List<T> findall() throws Exception { return getsession().createcriteria(persistentclass).list();

public T findbyname(string nome) { return (T) getsession().createcriteria(persistentclass).add(restrictions.eq("nome", nome).ignorecase()).uniqueresult(); public T findbyid(long id) { return (T) getsession().createcriteria(persistentclass).add(restrictions.eq("id", id)).uniqueresult(); private void close() { if (getsession()!= null && getsession().isopen()) { getsession().close(); No construtor da classe criamos um objeto Session, que nos dará acesso aos métodos necessários, e obtemos a entidade que está utilizando a classe no momento. Nos métodos save, update e delete, precisamos criar uma transação, abrir está transação e então executar o que queremos fazer. No caso do método save(), utilizamos o save(), que recebe como parâmetro um objeto e o framework executa um insert através dele. A grande vantagem é que não precisamos nos preocupar com o SQL de insert, update ou delete, só passamos o objeto e o framework faz o resto. Depois da execução, se tudo ocorrer bem é executado um commit na transação do banco de dados e então um close é chamado para fechar a comunicação com o banco de dados. Nas consultas foi utilizada a API Criteria, uma forma diferente de fazer o select quando utilizamos orientação objetos e não objetos relacionais. Outra forma que pode ser utilizada é o HQL, um dialeto SQL para o Hibernate, uma consulta muito parecida com o SQL, porém se trabalha com objetos e seus atributos e não com tabelas e colunas. Quando utilizamos Criteria, precisamos indicar qual a entidade que fará a consulta, por isso, utilizamos a variável persistentclass, para passarmos para o método qual entidade está sendo executada no momento da consulta. Seria como se ele estivesse passando por parâmetro algo como isto: Contato.class O objeto session, através do método getsession(), pode também nos fornecer o método de persistência saveorupdate(entity). Este método executa por conta um update ou um insert, dependendo do que estiver sendo passado para ele por parâmetro. Se a entidade passada já contiver um ID diferente de null, então ele executa um update, caso a entidade tenha um ID igual null, ele então cria uma nova linha na tabela como se executasse o método save(). 7. Classe Contato Nossa classe contato terá como atributos os campos da tabela Contatos, mapeados em forma de anotações. Através das anotações podemos passar todas as informações que uma coluna teria como o tipo de dado, tamanho, nome, entre outros. Essa classe pode ser obtida no tutorial anterior Utilizando Swing com JPA/Hibernate (http://mballem.wordpress.com/2011/02/24/utilizando-swing-com-jpahibernate/). Mude apenas o nome do pacote para package br.mb.tutorialhibernate.model;.

8. Classe ContatoDao Criamos a classe GenericDao para ser herdadas pelos demais dao s, assim, vamos agora criar a classe ContatoDao, onde estarão os métodos mais específicos da classe. Essa classe pode ser obtida no tutorial anterior Utilizando Swing com JPA/Hibernate (http://mballem.wordpress.com/2011/02/24/utilizando-swing-com-jpahibernate/). Mude o nome do pacote para package br.mb.tutorialhibernate.dao; e importe a classe Contato do pacote correspondente a este projeto. 9. Classe ContatoController Nenhuma alteração será feita na classe controller em relação a métodos, então você pode utilizar a classe do artigo anterior, essa classe pode ser obtida no tutorial Utilizando Swing com JPA/Hibernate (http://mballem.wordpress.com/2011/02/24/utilizando-swing-com-jpahibernate/). Mude apenas o nome do pacote para package br.mb.tutorialhibernate.controller; e importe a classe Contato e ContatoDao correspondentes a esse projeto. 10. Classe ContatoFrame A interface continua a mesma, uma interface como a da figura 3. Figura 3 - Interface Contatos Esta classe não foi postada no artigo, mas você pode pegá-la no tutorial anterior, acessando Utilizando Swing com JPA/Hibernate (http://mballem.wordpress.com/2011/02/24/utilizando-swing-com-jpahibernate/), e é claro, não se esqueça de alterar o nome do pacote e dos imports de ContatoController e Contato.

Conclusão Este tutorial demonstrou como configurar e criar um projeto utilizando Hibernate com o uso da SessionFactory. Saiba mais Criteria http://download.oracle.com/javaee/6/tutorial/doc/gjitv.html Genéricos em Java http://en.wikipedia.org/wiki/generics_in_java HQL http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html Criteria com hibernate http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html Documentação de Referência Hibernate http://docs.jboss.org/hibernate/core/3.5/reference/pt- BR/pdf/hibernate_reference.pdf Hibernate Annotations http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html Graphical User Interface http://download.oracle.com/javase/tutorial/ui/index.html