Páginas

segunda-feira, 26 de agosto de 2013

Projeto simples Hibernate + JPA + MySQL


Olá tudo bem ?

Nesse post iremos ver alguns comandos para manipular entidades.

Vamos criar um projeto simples utilizando Hibernate + JPA + MySQL.

1.1 Crie um projeto Java Project chamado Pessoa

Criado o projeto primeiramente crie uma pasta chamada lib para adicionar os jar do hibernate e o driver MySQL.
Dentro do arquivo lib coloque os jar e lembrando novamente nao esqueça de adicionar o jar do banco que irá utilizar.

Abra o arquivo persistence e adicione as seguintes configurações.
Dica: Adicione JbossTools na IDE que facilita a configuração.


  
   
   
   
   
   
   
   
   
   

  
 

1.2 Abra o MySql e crie a database Aula1

create database Aula1

1.3 Crie uma classe Pessoa dentro de um package chamado br.com.vejajava.entidades

@Entity
@Table(name="pessoa")
public class Pessoa {
 
 @Id
 @GeneratedValue
 private Long id;
 
 @Column(name="nome", length=50, nullable=false)
 private String nome;
 
 @Column(name="idade")
 private Integer idade;

 //get e set

dica para gerar get e set mais rapido.
Ctrl + 3 digite gg select getters and setters >select all > ok.

Se voce tiver adicionado o JPA no project, veja que está dando um erro na classe, isso porque temos que adicionar no arquivo persistence a classe que está sendo mapeada. Para isso adicione antes de propreties

br.com.vejajava.entidades.Pessoa

@Entity funciona para que a classe que está sendo mapeada seja criada no banco de dados.
@Table no meu caso nao era necessaria, se nao tivesse ela criaria a tabela pessoa automaticamente com p 'minusculo', coloquei so para melhor entendimento, poderia modificar o nome da classe para "tb_pessoa".
@Id O atributo que tem essa anotação sera a chave primária da tabela.
@GeneratedValue esse campo será um auto incremente. por padrão ele utiliza Auto incremente. Mas você pode modificar para identity basta passar a seguinte anotação (strategy = GenerationType.IDENTITY).
@Column foi passado 3 valores name que vai representar qual nome que esse atributo vai ter na minha classe, length o tamanho dele e nullable que nao permite valor null.

1.4 Crie uma classe PessoaMain dentro do package br.com.vejajava.principal

Persistindo

public class PessoaMain {
 public static void main(String[] args) {

  EntityManagerFactory fabrica = Persistence.createEntityManagerFactory("Aula1");
  EntityManager manager = fabrica.createEntityManager();

  manager.getTransaction().begin();
  
  Pessoa p1 = new Pessoa();
  p1.setNome("José");
  p1.setIdade(50);
  
  manager.persist(p1);
  manager.getTransaction().commit();
  
  manager.close();
  fabrica.close();
 }
}

Criamos uma fabrica de entityManager depois pegamos a configuração do banco de dados que está no arquivo persistence e passamos no parametro o nome persistence-unit que identifica o arquivo.

Depois iniciamos uma transação com begin;
criarmos um objeto p1 do tipo Pessoa;
passamos alguns valores para eles;
persistimos esses valores;
commitamos para o banco de dados;
fechamos a conexão do manager.


Verifique no banco de dados a tabela pessoa criada.
Faça um Select * from Pessoa para verificar todos os campos cadastrado.

Buscando

Utilizando método find para buscar dado cadastrado.

Pessoa p1 = manager.find(Pessoa.class, 1L);  
System.out.println(p1.getNome());

Veja na saída do console o nome da pessoa cadastrada no banco de dados, no meu exemplo: José

Estamos utilizamos apenas o find, mas poderiamos buscar os dados utilizando o getReference. Lembrando que no getReference voce deve passar uma referencia ao objeto, no caso p1. String nome = p1.getNome();
Vamos ver em outros post a diferença entre find & getReference e ver quando eles passa para um estado Managed e o tipo do seu comportamento. (EAGER E LAZY)

Alterando

Pessoa p1 = manager.find(Pessoa.class, 1L);  
p1.setNome("Carlos");
p1.setIdade(22);

Alteramos o nome da Joao para Carlos e a sua idade.

Podemos também utilizar uma funcionalidade muito poderosa do hibernate que é a chamada Query.
Com a Query podemos realizar consultas ao banco de dados.

Listando

Query query = manager.createQuery("select p From Pessoa p");
List pessoas = query.getResultList();
for (Pessoa pessoa : pessoas) {
System.out.println("Nome: " + pessoa.getNome() + "\nIdade: " + pessoa.getIdade());
}

Podemos tambem limitar o numero de resultado cadastrado no banco.
OBS: Insira mais pessoas no banco de dados para fazer o teste.
Vamos supor que temos 10 pessoas cadastrada no banco de dados e que nao gostariamos de buscar todos eles e sim apenas os 3 primeiros.
Utilizando o metodo setMaxResults voce consegue capturar quantos objetos voce quiser do banco.

A vantagem de utilizar esse tipo de consulta é que o hibernate ele contem sua propria linguagem de consulta chamada JPQL, que serve para buscar os dados de qualquer tipo de linguagem de banco de dados, entao nao importa se voce está utilizando o banco MySQL, SQL, Oracle, que ele consegue atraves da sua propria JPQL buscar os dados cadastrado no banco de dados.

Query query = manager.createQuery("Select p From Pessoa p order by p.nome asc");
query.setMaxResults(3);
List pessoas = query.getResultList();
for (Pessoa pessoa : pessoas) {
System.out.println("Nome: " + pessoa.getNome() + " \nIdade: " + pessoa.getIdade());

Veja que passamos no parametro createQuery a consulta que queremos realizar, buscar todos o dados cadastrado no banco de dados e utilizando o ordey by para que ele ordene por nome os dados cadastro para fazer a consulta. Lembrando que o metodo setMaxResult ele busca os primeiro dados cadastro.

Removendo

Pessoa p1 = manager.find(Pessoa.class, 3L);
manager.remove(p1);

Verifique no banco que foi removido o objeto que tinha a ID 3;

É isso galera, espero que tenham entendido. Q
Qualquer duvida só postar nos comentários.

Obrigado, até a proxíma!

Criticas e Sugestões são bem vindas para melhorar o blog ;)

Obrigado pela a visita. =D

Nenhum comentário:

Postar um comentário