Upload
fabio-siqueira
View
19
Download
0
Embed Size (px)
DESCRIPTION
apostila completa de jpa
Citation preview
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
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
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
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
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
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
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
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
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
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