Você está na página 1de 5

Exemplo de DAO (CRUD) utilizando JPA - public class UniversidadeJ... http://www.universidadejava.com.

br/docs/exemplodedaocrudutilizandojpa

pub l i c c l a s s U ni v er s i d ad eJav a {
docs >

Exemplo de DAO (CRUD) utilizando JPA


postado em 21/02/2011 03:53 por Rafael Sakurai [ 13/03/2011 09:24 atualizado(s) ]

Nesse exemplo vamos salvar, alterar, consultar por id e apagar um registro de pessoa, utilizaremos o banco de dados MySQL. OBS: Lembre de adicionar as bibliotecas do Hibernate e MySQL. Vamos criar uma Entity para representar a tabela Pessoa abaixo: CREATE DATABASE exemplos; USE exemplos; CREATE TABLE Pessoa ( id INT NOT NULL AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, dataNasc DATE NOT NULL, email VARCHAR(150), primary key(id) ); Criando a entity para representar a tabela Pessoa: package br.universidadejava.jpa.exemplo1.modelo; import import import import import import import import java.util.Date; javax.persistence.Column; javax.persistence.Entity; javax.persistence.GeneratedValue; javax.persistence.GenerationType; javax.persistence.Id; javax.persistence.Temporal; javax.persistence.TemporalType;

/** * Classe utilizada para representar uma pessoa. */ @Entity public class Pessoa { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false) private String nome; @Temporal(TemporalType.DATE) @Column(name = "dataNasc", nullable = false) private Date dataNascimento; private String email;

1 de 5

15/09/2012 08:44

Exemplo de DAO (CRUD) utilizando JPA - public class UniversidadeJ... http://www.universidadejava.com.br/docs/exemplodedaocrudutilizandojpa

public Date getDataNascimento() { return dataNascimento; } public void setDataNascimento(Date dataNascimento) { this.dataNascimento = dataNascimento; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } Vamos criar o arquivo persistence.xml . <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/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/persistence/persistence_1_0.xsd"> <persistence-unit name="ExemplosJPAPU" transactiontype="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.universidadejava.jpa.exemplo1.modelo.Pessoa</class> <properties> <property name="hibernate.connection.username" value="usuario"/> <property name="hibernate.connection.password" value="senha"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306 /exemplos"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> </properties> </persistence-unit> </persistence> Vamos criar uma classe PessoaDAO que possui os mtodos para manipular (salvar, atualizar, apagar e consultar por id) um objeto Pessoa. package br.universidadejava.jpa.exemplo1.dao; import import import import javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Persistence; br.universidadejava.jpa.exemplo.modelo.Pessoa;

/** * Classe utilizada para fazer realizar as operaes de banco de dados sobre a entity Pessoa. */ public class PessoaDAO { /** * Mtodo utilizado para obter o entity manager. * @return */

2 de 5

15/09/2012 08:44

Exemplo de DAO (CRUD) utilizando JPA - public class UniversidadeJ... http://www.universidadejava.com.br/docs/exemplodedaocrudutilizandojpa

private EntityManager getEntityManager() { EntityManagerFactory factory = null; EntityManager entityManager = null; try { //Obtm o factory a partir da unidade de persistncia. factory = Persistence.createEntityManagerFactory("ExemplosJPAPU"); //Cria um entity manager. entityManager = factory.createEntityManager(); //Fecha o factory para liberar os recursos utilizado. } finally { factory.close(); } return entityManager; } /** * Mtodo utilizado para salvar ou atualizar as informaes de uma pessoa. * @param pessoa * @return * @throws java.lang.Exception */ public Pessoa salvar(Pessoa pessoa) throws Exception { EntityManager entityManager = getEntityManager(); try { // Inicia uma transao com o banco de dados. entityManager.getTransaction().begin(); System.out.println("Salvando a pessoa."); // Verifica se a pessoa ainda no est salva no banco de dados. if(pessoa.getId() == null) { //Salva os dados da pessoa. entityManager.persist(pessoa); } else { //Atualiza os dados da pessoa. pessoa = entityManager.merge(pessoa); } // Finaliza a transao. entityManager.getTransaction().commit(); } finally { entityManager.close(); } return pessoa; } /** * Mtodo que apaga a pessoa do banco de dados. * @param id */ public void excluir(Long id) { EntityManager entityManager = getEntityManager(); try { // Inicia uma transao com o banco de dados. entityManager.getTransaction().begin(); // Consulta a pessoa na base de dados atravs do seu ID. Pessoa pessoa = entityManager.find(Pessoa.class, id); System.out.println("Excluindo os dados de: " + pessoa.getNome()); // Remove a pessoa da base de dados. entityManager.remove(pessoa); // Finaliza a transao. entityManager.getTransaction().commit(); } finally { entityManager.close(); } } /** * Consulta o pessoa pelo ID. * @param id * @return o objeto Pessoa. */ public Pessoa consultarPorId(Long id) { EntityManager entityManager = getEntityManager(); Pessoa pessoa = null; try {

3 de 5

15/09/2012 08:44

Exemplo de DAO (CRUD) utilizando JPA - public class UniversidadeJ... http://www.universidadejava.com.br/docs/exemplodedaocrudutilizandojpa

//Consulta uma pessoa pelo seu ID. pessoa = entityManager.find(Pessoa.class, id); } finally { entityManager.close(); } return pessoa; } } O mtodo salvar recebe o objeto Pessoa que ser salvo, neste exemplo usaremos este mtodo salvar uma nova pessoa ou atualizar os dados de uma nova pessoa. Mas como sabemos quando temos que salvar e quando tem que atualizar, basta olhar o atributo id da classe Pessoa, se o id for null significa que um novo objeto que ainda no foi salvo no banco de dados, ento utilizaremos o mtodo persist da EntityManager para salv-lo, caso o id tenha algum valor ento significa que o objeto j foi salvo anteriormente portanto ele deve ser atualizado ento utilizaremos o mtodo merge da EntityManager para atualiza-lo. Note que como vamos salvar ou atualizar os dados, precisamos criar uma transao, com o mtodo getTransaction() do EntityManager obtemos um objeto EntityTransaction com ele podemos iniciar a transao atravs do mtodo begin(), finalizar a transao com sucesso atravs do mtodo commit() ou desfazer as alteraes em caso de erro com o mtodo rolback(). Este mesmo conceito de transao ser utilizado no mtodo excluir. O mtodo excluir no precisa receber todos os dados da Pessoa, recebendo apenas o seu ID atravs do parametro Long id, podemos utilizar o mtodo find do EntityManager para consultar os dados da Pessoa, depois com o objeto Pessoa consultado podemos usar o mtodo remove do EntityManager para apagar os dados da Pessoa. O mtodo consultarPorId recebe um objeto Long chamado id, com o ID da tabela Pessoa, utilizando o mtodo find do EntityManager passamos a classe da entidade Pessoa.class e seu id para que possamos consultar os dados da Pessoa. Vamos criar uma classe PessoaDAOTeste para testarmos os mtodos da classe PessoaDAO: package br.universidadejava.jpa.exemplo1.teste; import import import import java.util.Calendar; java.util.GregorianCalendar; br.universidadejava.jpa.exemplo1.dao.PessoaDAO; br.universidadejava.jpa.exemplo1.modelo.Pessoa;

/** * Classe utilizada para testar os mtodos do PessoaDAO. */ public class PessoaDAOTeste { public static void main(String[] args) throws Exception { Pessoa pessoa = new Pessoa(); pessoa.setNome("Rafael Sakurai"); Calendar data = new GregorianCalendar(); data.set(Calendar.YEAR, 1983); data.set(Calendar.MONTH, 11); data.set(Calendar.DAY_OF_MONTH, 26); pessoa.setDataNascimento(data.getTime()); pessoa.setEmail("rafael.sakurai@metodista.br"); PessoaDAO dao = new PessoaDAO(); System.out.println("Salvando a pessoa: " + pessoa.getNome()); pessoa = dao.salvar(pessoa); pessoa.setNome("Rafael Guimares Sakurai"); pessoa = dao.salvar(pessoa); System.out.println("Alterando a pessoa: " + pessoa.getNome()); Pessoa pessoa2 = dao.consultarPorId(pessoa.getId()); System.out.println("Consultando: " + pessoa2.getNome());

4 de 5

15/09/2012 08:44

Exemplo de DAO (CRUD) utilizando JPA - public class UniversidadeJ... http://www.universidadejava.com.br/docs/exemplodedaocrudutilizandojpa

System.out.println("Removendo a pessoa: " + pessoa.getId()); dao.excluir(pessoa.getId()); } } Neste teste vamos criar um objeto pessoa e salva-lo, depois vamos altera o nome da pessoa, vamos consultar a pessoa pelo id e no final vamos apagar o registro da pessoa.

Fazer login | Denunciar abuso | Imprimir pgina | Remover acesso | Tecnologia Google Sites

5 de 5

15/09/2012 08:44

Você também pode gostar