20
Hibernate com JPA Prática

Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Embed Size (px)

Citation preview

Page 1: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Hibernate com JPAPrática

Page 2: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Definição da Aplicação

Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável.

Page 3: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Utilizaremos

Netbeans IDE 6.8 ou superior, banco de dados MySQL ou Derby e Hibernate 3.x .

Page 4: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Criando novo Projeto e Configurando o hibernate.

Criar um novo aplicativo Java Arquivo -> Novo Projeto -> Java -> Aplicativo Java

Configurar o Hibernate Adicionar Bilbiotecas

botão direito sobre a pasta bibliotecas escolha a opção Adicionar Biblioteca procure por “Hibernate JPA” clique em adicionar

Preparar Banco de Dados Adicionar biblioteca do DB (MySQL, por ex., MySQL

JDBC Driver.)

Page 5: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Preparar a estrutura do Projeto

Criar os seguintes pacotes: conf -> configuração do hibernate modelos - > pacote para as classes de domínio

Projeto, Atividade e Responsável)

testes -> classes que vamos utilizar para fazer nossos testes.

utils -> classes utilitárias.

Page 6: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Configuração do Hibernate Adicionar hibernate.cfg.xml no pacote conf

botão direito do mouse sobre o pacote conf e escolha a opção novo.

No lado categorias selecione Hibernate e do lado direito a opção Assistente Para configuração do Hibernate

Page 7: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Configuração do Hibernate

Clicando no botão próximo o assistente solicita o nome arquivo Alterar pasta para src/conf, porque nós queremos que nosso

arquivo fique no pacote conf.

Page 8: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Conexão com uma fonte de dados

Pode ter sido previamente criada, mas vamos criar uma nova conexão.

Escolha no combobox a opção Nova Conexão com Banco de Dados

Page 9: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Conexão com uma fonte de dados

Page 10: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Conexão com uma fonte de dados Nome do Driver: Driver JDBC do banco que vamos conectar: MySQL Host: Máquina onde nosso banco de dados está instalado e esperando por conexão:

localhost (nossa própria máquina) Porta: porta em que o mysql está escutando, aguardando por conexão, se nenhuma

porta é informada é utilizada a porta padrão a 3306. Banco de Dados: Nome da nossa fonte de dados, onde nossas tabelas serão

criadas. Se ainda não foi criado seu banco, use o seu mysql. Chamar banco de dados de projectdb

Nome Usuário: Nome do usuário usado para acessar seu banco de dados, vamos usar o usuário administrador que no mysql é o usuário root.

Senha: Informe a senha usada para acessar o banco de dados.

Page 11: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Alterando a configuração atual Exibir na console toda e qualquer instrução enviada

para o banco de dados. Na janela de configuração do arquivo vamos selecionar

a opção Propriedades Opcionais -> Propriedades de

Configurar -> Adicionar

escolha a opção hibernate.show_sql e valor digite true.

Page 12: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Primeira Entidade: Responsavelpackage modelos;

import java.io.Serializable;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;

/** * criando em 10/11/2010 * @author bacala */@Entitypublic class Responsavel implements Serializable {

@Id @GeneratedValue private long id; private String matricula; private String nome;

// métodos get e set

public long getId() { return id; } ……

Page 13: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Anotações JPA É importante observar que os imports feitos, foram todos do pacote

javax.persitence e não do pacote do hibernate, isso porque nós queremos seguir a especificação e não apenas usar o hibernate de forma pura.

Detalhando as anotações: @Entity -> a classe é uma entidade e que seus objetos serão persistido em

banco de dados @Id -> Informa o atributo que será nossa chave primaria. @GeneratedValue -> Informa que o valor desse atributo será gerado

automaticamente. Em nenhum momento fizemos referencia à nenhum nome de tabela ou

coluna do banco de dados, isso porque estamos convencionando que o nome da tabela será o mesmo nome da classe e que o nome das colunas será o mesmo nome dos atributos. @Table(name=”nome_tabela”) informa o nome da tabela com a qual nossa

entidade seria mapeada. @Column(“nome_coluna”) informa nomes diferente para nossas colunas da

tabela.

Page 14: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Informar ao Hibernate as classes informar para o hibernate a localização das

classes de entidade para que ele possa reconhecer como uma entidade mapeada.

abrir arquivo hibernate.cfg.xml e na opção mapeamentos vamos adicionar a classe Responsavel.

Page 15: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Adicionando a entidade Responsavel

Page 16: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Lendo a configuração e criando um BDpackage utils;

import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GerarBancoDeDados { public static void main(String...args) { /** * AnnotationConfiguration - responsavel por ler arquivo hibernate.cfg.xml e reconhecer nossas entidades mapeadas. **/ AnnotationConfiguration configuration = new AnnotationConfiguration(); /** * o método configure solicita o caminho do arquivo hibernate.cfg.xml. Caso o arquivo * não esteja em um pacote diferente do pacote desta classe, não seria necessario * informá-lo . Simplesmente usaríamos configuration.configure(). **/ configuration.configure("conf/hibernate.cfg.xml"); SchemaExport export = new SchemaExport(configuration); /** * create espera dois argumento booleanos. O primeira informa * se queremos que ele exiba o script sql gerado. O segundo se queremos * que ele execute diretamente as instruções no banco de dados.**/ export.create(true, true); }}

Page 17: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Criando um utilitáriopackage utils;

import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil { private static SessionFactory factory;

/** * escopo estático. É a primeira coisa executa em uma classe e só executada apenas uma vez. Objetivo é carregar nossas configurações do * hibernate para que sessões possam ser criadas. * O hibernate possui uma classe responsavel por funciona como uma fábrica de sessões: classe SessionFactory **/ static { AnnotationConfiguration configuration = new AnnotationConfiguration(); configuration.configure("conf/hibernate.cfg.xml"); factory = configuration.buildSessionFactory(); } /** * sempre que quisermos uma session do hibernate apenas chamamos * HibernateUtils.getSession();**/ public static Session getSession(){ return factory.openSession(); }}

Page 18: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Testando...package testes;

import modelos.Responsavel;import org.hibernate.Session;import utils.HibernateUtil;

public class TestaEntidadeResponsavel { public static void main(String...args) { /** * Solicitando uma sessão para nossa fábrica de sessões. **/ Session session = HibernateUtil.getSession(); /** * Criando um objeto da nossa entidade que será salvo no banco **/Responsavel responsavel = new Responsavel();

responsavel.setMatricula("AM-123"); responsavel.setNome(“Mané ");/** * Iniciando uma transação com o banco de dados **/ session.getTransaction().begin(); /** * chamando o método save do hibernate para persistir nosso objeto **/ session.save(responsavel); /** * encerrando e comitando nossa transação **/ session.getTransaction().commit(); }}

Page 19: Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos contendo as seguintes entidades: Projeto, Atividade e Responsável

Recuperando o objeto gravado...

...Responsavel resp = (Responsavel)

session.load(Responsavel.class, 1L);System.out.println("Nome: " +resp.getNome());...