27/10/13
CR UD com Hi ber nate 4 e JPA. | we have sci ence
we have science Um blog sobre Java e computação. ;) POSTED BY GABRIEL POSTED ON NOVEMBER 3, 2012 POSTED POS TED UNDER UNDER HIBERNATE , JAVA JAVA,, JAVA JAVA + MYSQL MYSQ L COMMENTS 8 COMMENTS
CRUD com com Hibernate Hibernate 4 e JPA.
i 1 Vote Bem , vou vou expli explicar car o básico básico para para se se utilizar esse framework que é uma p* mão da roda na hora de desenvolver aplicações que acessam o banco de dados. Primeiro lugar, o que é Hi Hibernate? bernate?
É um framework de persistência de dados, ele faz um mapeamento “Objeto Relacional”, no qual faz você você trabalha tra balharr passando objetos e recebendo objetos, ao invés da forma conv c onvencional encional que você tem que fazer isso manualmente, no caso do JDBC. Antes de começar com a aplicação, vou postar os links dos jars necessários.
wehavesci ence.com/2012/11/03/cr ud- com- hi ber nate- 4- e- j pa/
1/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
Baixe a ultima versão do Hibernate, no caso, baixei a 4.1.8. Link aqui: Hibernate 4 (http://sourceforge.net/projects/hibernate/files/hibernate4/) Agora, baixe o connector do MySQL, que será o banco de dados utilizado nesta aplicação: Connector MySQL (http://dev.mysql.com/downloads/connector/j/) Agora, crie uma base de dados no MySQL com o nome de “wehavescience”. Após baixar, crie um projeto Java utilizando a IDE de sua preferência. Adicione o jar do connector do MySQL no seu classpath. Agora, dentro da pasta lib do hibernate que você baixou, adicione no seu classpath do seu projeto todos os jars da pasta required e todos os jars da pasta jpa. Okaydokay, próximo passo: Dentro da pasta src do seu projeto, crie uma pasta chamada META-INF. Dentro da pasta META-INF, crie um arquivo chamado persistence.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Nesse trecho de código, você define o seu persistence unit , que você vai ter que referenciar no seu DAO: 1
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
2/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
Agora, vamos criar nossa entidade Pessoa. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
package com.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table;
@Entity @Table(name="pessoas") public class Pessoa { private Long id; private String nome; private Integer idade; @Id @GeneratedValue @Column(name="pessoas_id" ) public Long getId() { return id; } public void setId(Long id) { this.id = id; }
@Column(name="pessoas_nome" ) public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; }
@Column(name="pessoas_idade") public Integer getIdade() { return idade; } public void setIdade(Integer idade) { this.idade = idade; }
}
A anotação @Entity , você define que sua classe é uma entidade a ser mapeada pelo hibernate. Nessa anotação @Table(name=”pessoas”) , defino que a tabela no banco de dados terá o nome de “pessoas” Defino minha chave primária aqui @Id , e @GeneratedValue fala que o valor será gerado pelo próprio hibernate, de forma sequencial. Notem que eu coloquei um @Column(name=”pessoas_nomedacoluna”) em todas as colunas. Não é necessário, porém eu coloquei para definir o nome de cada uma no banco de dados. wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
3/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
Existem inúmeras outras anotações, talvez mais tarde eu cite outras que são bem usadas, mas por agora, só essas mesmo, até porque o objetivo desse tutorial é apenas ensinar os comandos básicos de CRUD. Agora, criaremos a classe DAO. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
package com.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.entities.Pessoa; public class PessoaDAO { protected EntityManager entityManager; public PessoaDAO() { entityManager = getEntityManager(); }
private EntityManager getEntityManager() { EntityManagerFactory factory = Persistence .createEntityManagerFactory( "WeHaveSciencePU"); if (entityManager == null) { entityManager = factory.createEntityManager(); } return entityManager;
} public Pessoa getById( final Long id) { return entityManager.find(Pessoa. class, id); }
@SuppressWarnings ("unchecked") public List findAll() { return entityManager.createQuery( "FROM " + Pessoa. class.getN .getResultList(); } public void persist(Pessoa pessoa) { try { entityManager.getTransaction().begin(); entityManager.persist(pessoa); entityManager.getTransaction().commit(); } catch (Exception ex) { ex.printStackTrace(); entityManager.getTransaction().rollback(); } } public void merge(Pessoa pessoa) { try { entityManager.getTransaction().begin();
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
4/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
entityManager.merge(pessoa); entityManager.getTransaction().commit(); } catch (Exception ex) { ex.printStackTrace(); entityManager.getTransaction().rollback(); }
}
public void remove(Pessoa pessoa) { try { entityManager.getTransaction().begin(); pessoa = entityManager.find(Pessoa. class, pessoa.getId() entityManager.remove(pessoa); entityManager.getTransaction().commit(); } catch (Exception ex) { ex.printStackTrace(); entityManager.getTransaction().rollback(); } } public void removeById( final Long id) { try { Pessoa pessoa = getById(id); remove(pessoa); } catch (Exception ex) { ex.printStackTrace(); } }
}
Utilizo o objeto EntityManager, no qual são realizadas as ações com o banco. Notem que eu estou definindo meu persistence unit, onde são carregadas as configurações do persistence.xml 1 2 3 4 5 6 7 8 9
private EntityManager getEntityManager() { EntityManagerFactory factory = Persistence .createEntityManagerFactory( "WeHaveSciencePU" ); if (entityManager == null) { entityManager = factory.createEntityManager(); } return entityManager;
}
Após criado o nosso DAO, vamos fazer algums testes. 1 2 3 4 5 6 7 8 9 10
package com.main; import com.dao.PessoaDAO; import com.entities.Pessoa; public class Teste { public static void main(String[] args) { Pessoa p = new Pessoa();
p.setNome("Gabriel");
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
5/9
27/10/13
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
CRUD com Hibernate 4 e JPA. | we have science
p.setIdade(19); Pessoa p2 = new Pessoa(); p2.setNome( "José"); p2.setIdade(72);
Pessoa p3 = new Pessoa(); p3.setNome( "Maria"); p3.setIdade(27);
Pessoa p4 = new Pessoa(); p4.setNome( "Rodolfo"); p4.setIdade(16);
PessoaDAO dao = new PessoaDAO(); dao.persist(p); dao.persist(p2); dao.persist(p3); dao.persist(p4);
for(Pessoa pe : dao.findAll()){ System.out.println(pe.getId()); System.out.println(pe.getNome()); System.out.println(); }
dao.remove(p); dao.removeById(p2.getId());
for(Pessoa pe : dao.findAll()){ System.out.println(pe.getId()); System.out.println(pe.getNome()); System.out.println(); }
} }
Obs.: Esse é apenas um exemplo de como criar um DAO, eu aconselho a usar algum framework de injeção de dependências como por exemplo o Spring para poder injetar seu EntityManager, ao invés de você criá-lo manualmente. O Spring sabe a melhor hora de criar ou fechar uma conexão com o banco, além de possuir pool de conexões(no qual você pode definir um tamanho) além de que você não precisa especificar manualmente quando vai abrir ou fechar uma transação, ele pode fazer isso para você.
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
6/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
Espero que gostem e que tenha sido um tutorial útil! Valeu! Dúvidas? Postar nos comentários! []‘s You May Like
About these ads (http://en.wordpress.com/aboutthese-ads/)
1.
banco de dados (http://wehavescience.com/tag/banco-de-dados/) hibernate (http://wehavescience.com/tag/hibernate-2/) hibernate 4 (http://wehavescience.com/tag/hibernate-4/) java (http://wehavescience.com/tag/java/) jdbc (http://wehavescience.com/tag/jdbc/) jpa (http://wehavescience.com/tag/jpa/) jpa2 (http://wehavescience.com/tag/jpa2/) persistencia (http://wehavescience.com/tag/persistencia/)
8 thoughts on “CRUD com Hibernate 4 e JPA.” 1. Wilson says: May 18, 2013 at 6:39 pm Legal, tava dificil encontrar um tutorial com a versão do Hibernate mais recente Reply 2. Wilson says: May 18, 2013 at 7:00 pm Esse tutorial é aplicavel a projetos swing ? Reply wehavescience says: May 19, 2013 at 2:56 pm Fala, Wilson! Sim, é sim! wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
7/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
Reply 3. Nathalia says: May 25, 2013 at 10:19 am Esse tutorial está excelente! Passei por alguns probleminhas já resolvidos, e caso alguém passe pelos mesmos problemas, eis as soluções: O primeiro probleminha q eu tive foi em relação a localização de “META-INF/persistence.xml”. Estou usando o netbeans, e quando coloquei na raiz da pasta src, não funfou. Pra funcionar, eu tive que usar “src/java/META-INF/persistence.xml” Eu tive problema em utilizar o javax no arquivo persistence. Então segui essa solução aqui, em que faz uso das propriedades do próprio hibernate: http://www.guj.com.br/java/229799-javalangunsupportedoperationexception-the-user-mustsupply-a-jdbc-connection Reply 4. Moises says: July 14, 2013 at 9:55 pm Ótimo post Gabriel, tive alguns problemas no início com “No Persistence provider for EntityManager named…” mas depois de algumas pesquisas ví que não tinha incluído o hibernate-entitymanager-4.1.10.Final.jar da pasta JPA das libs do Hibernate, incluí e voalááá, funcionou lindamente !!! *_* Reply 5. Tiago Cássio says: July 16, 2013 at 7:05 pm Olá Gabriel, muito bom o seu tutorial! Estou com uma dúvida sobre o método getEntityManager(); Onde você utilizou ele??? Eu posso trocar ele pela anotação @PersistenceContext(unitName=”WeHaveScience”)??? No aguardo, Reply wehavescience says: July 16, 2013 at 7:08 pm Fala, Tiago. Então, eu usei no construtor do PessoaDAO entityManager = getEntityManager();
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
8/9
27/10/13
CRUD com Hibernate 4 e JPA. | we have science
E sim, você pode, porém você precisa estar executando a sua aplicação em algum contexto, web, ejb, por exemplo, se estivesse rodando em um JBoss ou Tomcat… Nesse caso, como eu estou chamando o DAO do próprio main, essa anotação não iria funcionar e o entityManager ia permanecer null. Espero que tenha esclarecido a sua dúvida. Abração! Reply Tiago Cassio says: July 17, 2013 at 2:37 am Ola Gabriel, boa noite! Agora sim tirei minha duvida, muito obrigado!
Blog at WordPress.com. | The Zoren Theme.
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/
9/9