10
w e have science CRUD com Hibernate 4 e JPA. i 4 Votes em, 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. Baixe a ultima versão do Hibernate, no caso, baixei a 4.1.8. Link aqui: Agora, baixe o connector do MySQL, que será o banco de dados utilizado nesta aplicação: 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 Hibernate 4 Connector MySQL CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 1 de 10 13/04/2015 13:52

CRUD Com Hibernate 4 e JPA

Embed Size (px)

DESCRIPTION

apostila completa de jpa

Citation preview

Page 1: CRUD Com Hibernate 4 e JPA

we have science

CRUD com Hibernate 4 e JPA.

i4 Votes

em, 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 qual fazvocê trabalhar passando objetos e recebendo objetos, ao invés da forma convencional que você temque 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:

Agora, baixe o connector do MySQL, que será o banco de dados utilizado nesta aplicação:

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

Hibernate 4

ConnectorMySQL

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

1 de 10 13/04/2015 13:52

Page 2: CRUD Com Hibernate 4 e JPA

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:

Agora, vamos criar nossa entidade Pessoa.

12345678910111213141516171819202122

<?xml version="1.0" encoding="UTF-8" ?><persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/pers version="2.0" xmlns="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.MySQL5InnoDBDialec <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/weh <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" value <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" />

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

2 de 10 13/04/2015 13:52

Page 3: CRUD Com Hibernate 4 e JPA

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 poragora, só essas mesmo, até porque o objetivo desse tutorial é apenas ensinar os comandos básicos deCRUD.

Agora, criaremos a classe DAO.

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

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

3 de 10 13/04/2015 13:52

Page 4: CRUD Com Hibernate 4 e JPA

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

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(); entityManager.merge(pessoa); entityManager.getTransaction().commit(); } catch (Exception ex) { ex.printStackTrace(); entityManager.getTransaction().rollback(); } }

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

4 de 10 13/04/2015 13:52

Page 5: CRUD Com Hibernate 4 e JPA

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.

606162636465666768697071727374757677787980

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

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

5 de 10 13/04/2015 13:52

Page 6: CRUD Com Hibernate 4 e JPA

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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

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

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

6 de 10 13/04/2015 13:52

Page 7: CRUD Com Hibernate 4 e JPA

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ê.

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

[]’s

banco de dados hibernate hibernate 4 java jdbc jpa jpa2 persistencia

Posted on November 3, 2012October 5, 2013 by Gabriel in Hibernate, Java, JDBC api

15 thoughts on “CRUD com Hibernate 4 e JPA.”

Wilsonsays:

May 18, 2013 at 6:39 pmLegal, tava dificil encontrar um tutorial com a versão do Hibernate mais recente

Reply

1.

Wilsonsays:

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

Reply

wehavescience1.

2.

15

You May Like

1.

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

7 de 10 13/04/2015 13:52

Page 8: CRUD Com Hibernate 4 e JPA

says:May 19, 2013 at 2:56 pm

Fala, Wilson! Sim, é sim!

Reply

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 assoluçõ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, em quefaz uso das propriedades do próprio hibernate:

Reply

3.

Moisessays:

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 o hibernate-entitymanager-4.1.10.Final.jar da pasta JPA das libs do Hibernate, incluí e voalááá, funcionoulindamente !!! *_*

Reply

4.

Tiago Cássiosays:

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 pm

Fala, Tiago.

Então, eu usei no construtor do PessoaDAO

entityManager = getEntityManager();

1.

5.

h\p://www.guj.com.br/java/229799-javalangunsupportedoperationexception-the-user-must-sup-ply-a-jdbc-connection

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

8 de 10 13/04/2015 13:52

Page 9: CRUD Com Hibernate 4 e JPA

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 o entityManageria 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!

1.

Bruno Tacca

says:October 29, 2013 at 1:54 pm

Você salvou meu dia, foi o sexto tutorial que tentei… o unico que deu certo.

Parabéns!

Reply

6.

Marcos Felipe

says:December 16, 2013 at 5:28 pm

Vc não implementou nenhuma interface ??Não utilizou nenhuma classe com regra de negocio :OTem outro exemplo com Designer Pa\ern ???

Reply

Gabrielsays:

December 16, 2013 at 5:31 pmEsse exemplo é para mostrar apenas o básico do JPA utilizando o Hibernate. Nada mais, nadamenos.

[]’s

Reply

1.

7.

Pingback: TDSI – Mapeamento objeto relacional (MOR) com Hibernate | Alex Sandro Valério8.

Wansays:

May 29, 2014 at 5:07 pmOlá Tiago, primeiramente, parabéns pelo tutorial. Só restou uma dúvida: se eu tiver 10 entidades,consequentemente terei 10 DAOentidade, com isso terei muito código repetido em todos os 10DAOs, tem como otimizar isso?

Reply

9.

:P

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

9 de 10 13/04/2015 13:52

Page 10: CRUD Com Hibernate 4 e JPA

Gabrielsays:

May 29, 2014 at 5:15 pmBem, meu nome é Gabriel, não Tiago, mas tudo bem. hahahahaProcure aqui no meu blog sobre Generic DAO, é exatamente o que você procura.

Abraços!

Reply

1.

Nilvandro Muiangasays:

November 12, 2014 at 6:30 amMuito origado.

Reply

10.

. .

Follow

Follow “we have science”

Build a website with WordPress.com

:P

Create a free website or blog at WordPress.com The Scrawl Theme

CRUD com Hibernate 4 e JPA. | we have science http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

10 de 10 13/04/2015 13:52