crud com hibernate 4 e jpa

9
27/10/13 CRUD com Hibernate 4 e JPA. | we have science wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 1/9 we have science Um blog sobre Java e computação. ;) POSTEDBY GABRIEL POSTEDON NOVEMBER3, 2012 POSTEDUNDER HIBERNATE , JAVA , JAVA+ MYSQL COMMENTS 8 COMMENTS CRUD com Hibernate 4 e JPA. i 1 Vote Bem, vou explicar o básico para 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 é Hibernate? É um framework de persistência de dados, ele faz um mapeamento “Objeto Relacional”, no qual faz você trabalhar passando objetos e recebendo objetos, ao invés da forma convencional 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.

Upload: orangota

Post on 29-Dec-2015

67 views

Category:

Documents


1 download

TRANSCRIPT

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 1/9

we have science

Um blog sobre Java e computação. ;)

�POSTED BY

GABRIELPOSTED ON

NOVEMBER 3, 2012POSTED UNDER

HIBERNATE, JAVA, JAVA + MYSQLCOMMENTS

8 COMMENTS

CRUD com Hibernate 4 e JPA.

i1 Vote

Bem, vou explicar o básico para se utilizar esse framework que é uma p* mão da roda na hora dedesenvolver aplicações que acessam o banco de dados.

Primeiro lugar, o que é Hibernate?É um framework de persistência de dados, ele faz um mapeamento “Objeto Relacional”, no qualfaz você trabalhar passando objetos e recebendo objetos, ao invés da forma convencional 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.

Baixe a ultima versão do Hibernate, no caso, baixei a 4.1.8. Link aqui: Hibernate 4

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 2/9

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 projetotodos 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

Nesse trecho de código, você define o seu persistence unit, que você vai ter que referenciar no seuDAO:

E nesse trecho, suas informações do banco, como por exemplo, nome da base de dados, usuário esenha:

12345678910111213141516171819202122

<?xml version="1.0" encoding="UTF-8" ?><persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance (http://www.w3.org/2001/XMLSchema-instance) xsi:schemaLocation="http://java.sun.com/xml/ns/persistence (http://java.sun.com/xml/ns/persistence) version="2.0" xmlns="http://java.sun.com/xml/ns/persistence (http://java.sun.com/xml/ns/persistence) <persistence-unit name="WeHaveSciencePU" transaction-type="RESOURCE_LOCAL" <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/wehavescience <property name="javax.persistence.jdbc.user" value="root" <property name="javax.persistence.jdbc.password" value="admin" <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="false" /> <property name="hibernate.use_sql_comments" value="false" <property name="hibernate.jdbc.wrap_result_sets" value="false" <property name="hibernate.hibernate.cache.use_query_cache" <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit></persistence>

1 <persistence-unit name="WeHaveSciencePU" transaction-type="RESOURCE_LOCAL"

123

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/wehavescience<property name="javax.persistence.jdbc.user" value="root" /><property name="javax.persistence.jdbc.password" value="admin" />

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 3/9

Agora, vamos criar nossa entidade Pessoa.

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ópriohibernate, 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.

Existem inúmeras outras anotações, talvez mais tarde eu cite outras que são bem usadas, mas por

1234567891011121314151617181920212223242526272829303132333435363738394041424344

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; }}

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 4/9

Existem inúmeras outras anotações, talvez mais tarde eu cite outras que são bem usadas, mas poragora, só essas mesmo, até porque o objetivo desse tutorial é apenas ensinar os comandos básicos deCRUD.

Agora, criaremos a classe DAO.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051

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<Pessoa> findAll() { return entityManager.createQuery("FROM " + Pessoa.class.getName()) .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();

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 5/9

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 dopersistence.xml

Após criado o nosso DAO, vamos fazer algums testes.

5253545556575859606162636465666768697071727374757677787980

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

123456789

private EntityManager getEntityManager() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("WeHaveSciencePU"); if (entityManager == null) { entityManager = factory.createEntityManager(); } return entityManager;}

12345678910

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");

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 6/9

Obs.: Esse é apenas um exemplo de como criar um DAO, eu aconselhoa usar algum framework de injeção de dependências como por exemploo Spring para poder injetar seu EntityManager, ao invés de você criá-lomanualmente. O Spring sabe a melhor hora de criar ou fechar umaconexã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 especificarmanualmente quando vai abrir ou fechar uma transação, ele pode fazerisso para você.

11121314151617181920212223242526272829303132333435363738394041424344454647484950

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

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 7/9

Espero que gostem e que tenha sido um tutorial útil! Valeu!Dúvidas? Postar nos comentários!

[]‘s

You May Like

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 pmLegal, tava dificil encontrar um tutorial com a versão do Hibernate mais recente

Reply2.

Wilson says:May 18, 2013 at 7:00 pmEsse tutorial é aplicavel a projetos swing ?

Reply

wehavescience says:May 19, 2013 at 2:56 pmFala, Wilson! Sim, é sim!

About these ads (http://en.wordpress.com/about-these-ads/)

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 8/9

Reply3.

Nathalia says:May 25, 2013 at 10:19 amEsse tutorial está excelente!Passei por alguns probleminhas já resolvidos, e caso alguém passe pelos mesmos problemas, eisas 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, eutive 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, emque faz uso das propriedades do próprio hibernate:http://www.guj.com.br/java/229799-javalangunsupportedoperationexception-the-user-must-supply-a-jdbc-connection

Reply4.

Moises says:July 14, 2013 at 9:55 pmÓtimo post Gabriel, tive alguns problemas no início com “No Persistence provider forEntityManager named…” mas depois de algumas pesquisas ví que não tinha incluído ohibernate-entitymanager-4.1.10.Final.jar da pasta JPA das libs do Hibernate, incluí e voalááá,funcionou lindamente !!! *_*

Reply5.

Tiago Cássio says:July 16, 2013 at 7:05 pmOlá 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 pmFala, Tiago.

Então, eu usei no construtor do PessoaDAO

entityManager = getEntityManager();

E sim, você pode, porém você precisa estar executando a sua aplicação em algum contexto,

27/10/13 CRUD com Hibernate 4 e JPA. | we have science

wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 9/9

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 euestou chamando o DAO do próprio main, essa anotação não iria funcionar e oentityManager ia permanecer null.

Espero que tenha esclarecido a sua dúvida.

Abração!

Reply

Tiago Cassio says:July 17, 2013 at 2:37 amOla Gabriel, boa noite!

Agora sim tirei minha duvida, muito obrigado!

Blog at WordPress.com. | The Zoren Theme.