Vamos dar sequencia aos posts sobre JPA 2.0 + Hibernate.

O pré-requisito inicial deste post é ter lido e/ou seguido este post.

Neste post vamos ver algumas das operações basicas de um sistema, tais como:

  • Persistir;
  • Listar;
  • Buscar;
  • Atualizar;
  • Remover;

Persistindo dados:

Para persistir e armazenar as informações de um objeto no banco de dados basta utilizarmos o método persist() do EntityManager.

		Produto novoProduto = new Produto();

		novoProduto.setNome("Produto 1");
		novoProduto.setValor(25.8);

		entityManager.persist(novoProduto);

Listando os dados:

Para obter uma listagem de todos os objetos referentes aos registros de uma tabela , deve-se utilizar a linguagem JPQL, uma linguagem de consulta do JPA.
A vantagem do JPQL é que a sintaxe é a mesma para todos os bancos de dados.

		Query q = entityManager.createQuery("SELECT p FROM Produto p");
		List<Produto> produtos = q.getResultList();

Buscando os dados:

Para obter um objeto que contenha informações armazenadas no banco de dados utilizamos o método find() ou o método getReference() do EntityManager, ambos passando a classe e o ID do objeto.

		Produto produto1 = entityManager.find(Produto.class, 1L);
		Produto produto2 = entityManager.getReference(Produto.class, 2L);

A principal diferença entre os dois métodos é que o primeiro recupera os valores imediatamente, já o segundo aguarda a chamada de um método GET para obter os valores.

Removendo os dados:

Para remover um registro correspondente a um objeto basta buscarmos este registro utilizando o método find() ou o etReference() e depois utilizar o método remove() do EntityManager.

		Produto rmProduto = entityManager.find(Produto.class, 1L);
		entityManager.remove(rmProduto);

Atualizando os dados:

Para alterar os dados de um registro do banco de dados basta utilizar os próprios métodos setters desse objeto.

		Produto prodAtualizado = entityManager.find(Produto.class, 2L);
		prodAtualizado.setNome("Produto Alterado !!!");

Transações

As modificações que realizamos aos objetos que são administrados pelo EntityManager são mantidos na memória. Devido a isso, em algum momento devemos sincronizar estes dados que estão na memória com o banco de dados.
Para abrirmos uma transação com o banco, utilizamos o método begin().

		entityManager.getTransaction().begin();

Com a transação ja aberta podemos sincronizar as informações utilizando o método flush() ou o método commit()

		Produto produto = entityManager.find(Produto.class, 1L);
		produto.setNome("Transações !!");

		entityManager.getTransaction().begin();
		entityManager.getTransaction().commit();
		Produto produto = entityManager.find(Produto.class, 1L);
		produto.setNome("Transações !!");

		entityManager.getTransaction().begin();
		entityManager.getTransaction().flush();

Vamos ver tudo isso na prática agora.

Vou continuar com o mesmo projeto, porém criei mais cinco classes, veja:

Classe insereProdutos

package com.wordpress.programandojava.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.wordpress.programandojava.entities.Produto;

public class insereProdutos {
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("PJ_Vendas");
		EntityManager entityManager = factory.createEntityManager();

		Produto novoProduto = new Produto();

		novoProduto.setNome("Produto 1");
		novoProduto.setValor(25.8);

		entityManager.persist(novoProduto);
		
		entityManager.getTransaction().begin();
		entityManager.getTransaction().commit();
		
		factory.close();
	}
}

Classe listaProdutos

package com.wordpress.programandojava.test;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import com.wordpress.programandojava.entities.Produto;

public class listaProdutos {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("PJ_Vendas");
		EntityManager entityManager = factory.createEntityManager();

		Query q = entityManager.createQuery("SELECT p FROM Produto p");
		List<Produto> produtos = q.getResultList();

		for (Produto p : produtos) {
			System.out.println("Nome do produto: " + p.getNome()
					+ " - Valor: " + p.getValor());
		}
		factory.close();
	}
}

Classe buscaProduto

package com.wordpress.programandojava.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.wordpress.programandojava.entities.Produto;

public class buscaProduto {
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("PJ_Vendas");
		EntityManager entityManager = factory.createEntityManager();

		Produto produto1 = entityManager.find(Produto.class, 1L);
		Produto produto2 = entityManager.getReference(Produto.class, 2L);

		System.out.println("(FIND) Nome do produto: " + produto1.getNome()
				+ " -- Valor: " + produto1.getValor());

		System.out.println("(GETREFERENCE) Nome do produto: "
				+ produto2.getNome() + " -- Valor: " + produto2.getValor());

		factory.close();
	}
}

Classe removerProdutos

package com.wordpress.programandojava.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.wordpress.programandojava.entities.Produto;

public class removerProdutos {
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("PJ_Vendas");
		EntityManager entityManager = factory.createEntityManager();

		Produto rmProduto = entityManager.find(Produto.class, 1L);
		entityManager.remove(rmProduto);
		
		entityManager.getTransaction().begin();
		entityManager.getTransaction().commit();
		
		factory.close();
	}
}

Classe atualizaProdutos

package com.wordpress.programandojava.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.wordpress.programandojava.entities.Produto;

public class atualizaProdutos {
	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence
				.createEntityManagerFactory("PJ_Vendas");
		EntityManager entityManager = factory.createEntityManager();

		Produto prodAtualizado = entityManager.find(Produto.class, 2L);
		prodAtualizado.setNome("Produto Alterado !!!");

		entityManager.getTransaction().begin();
		entityManager.getTransaction().commit();

		factory.close();
	}
}

Veja a estrutura final do projeto:

O projeto final pode ser baixado clicando aqui.

Espero que tenham gostado e até a próxima.