Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos...

20
Hibernate com JPA Prática

Transcript of Hibernate com JPA Prática. Definição da Aplicação Pequeno sistema de gerencia de projetos...

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());...