Dev (Back & Front)ARTIGO

JPA com Java Básico

olá
pessoal, nesse post vou apresentar como fazer persistência
de dados
usando  100% JPA com Java Básico. O objetivo é ajudar aqueles
que estão dando o primeiro passo com a tecnologia.

Recomendação: Você vai precisar configurar a JPA no seu
projeto Java, portanto veja no post abaixo:

*Basta
adicionar ao seu projeto o arquivo .jar referente a JPA do pacote
hibernate annotations.

Post recomendado: JPA JBoss

Preparando o ambiente desenvolvimento

  1. crie um Java project no eclipse
  2. E monte conforme a estrutura abaixo:

  3. A classe TesteJPA ela deve conter o método main.

  4. Não esqueça de adicionar o .jar ao seu projeto. Se tem dúvida com
    fazer isso veja nos posts citados acima.

Preparando Banco de Dados

Vamos usar o MySql como BD e vou levar em conta que você já tem o
mesmo instalado e configurado. Crie apensa um DataBase e uma table
para este. Se quiser seguir o exemplo do post o nosso ficou assim:

DataBase: sistemas Table: Cliente

A tabela cliente possui os seguintes campos como
VARCHAR(nome,cidade,sobrenome)e um Integer(id). O id é
auto_increment e chave-primaria da tabela.

Desenvolvimento

Explicando
as anotações

@Entity=
é uma entidade que representa uma class
bean;
@Table
=
mapeia com o nome da tabela. Aqui eu coloquei o table
para explicar, mas poderia omitir levando em conta que eu teria uma
table no
meu BD com o mesmo nome da minha class
Bean.
Ou seja, se você não especificar qual será a tabela do BD, será
considerada o nome do Bean. Tenha atenção se você tem tabelas com
nomes diferentes em relação ao seu bean;
@Id
=
tem
relação com a chave primaria da sua tabela;
@Column
=

mapeia com as colunas da sua tabela, segue a mesma regra de table,
quando ter colunas com nomes diferentes este campo eh obrigatório,
caso contrario non-required
;

1. Deixe sua classe Cliente.java conforme abaixo:

package br.com.bean;<br />import javax.persistence.Entity;<br />import javax.persistence.GeneratedValue;<br />import javax.persistence.GenerationType;<br />import javax.persistence.Id;<br />import javax.persistence.Table;<br />@Entity<br />@Table(name="cliente")<br />public class Cliente {<br />@Id<br />@GeneratedValue(strategy=GenerationType.IDENTITY)<br />	private int id;<br />	private String nome;<br />	private String cidade;<br />	private String sobrenome;<br /><br />	public int getId() {<br />		return id;<br />	}<br />	public void setId(int id) {<br />		this.id = id;<br />	}<br />	public String getNome() {<br />		return nome;<br />	}<br />	public void setNome(String nome) {<br />		this.nome = nome;<br />	}<br />	public String getCidade() {<br />		return cidade;<br />	}<br />	public void setCidade(String cidade) {<br />		this.cidade = cidade;<br />	}<br />	public String getSobrenome() {<br />		return sobrenome;<br />	}<br />	public void setSobrenome(String sobrenome) {<br />		this.sobrenome = sobrenome;<br />	} }
  1. A classe ClienteDAO é responsável
    por implementar o CRUD usando a JPA, vamos ver aqui o salvar,
    excluir e atualizar.
    Então atualize seu arquivo ClienteDAO.java
    conforme abaixo:
package br.com.dao;<br /><br />import javax.persistence.EntityManager;<br />import javax.persistence.EntityManagerFactory;<br />import javax.persistence.Persistence;<br /><br />import br.com.bean.Cliente;<br /><br />public class ClienteDAO {<br /><br />	EntityManagerFactory emf; <br /><br />	private EntityManager getEntityManager(){<br />		return emf.createEntityManager();<br />	}<br />	public ClienteDAO() {<br />	emf = Persistence.createEntityManagerFactory("sistemas");<br />	}<br /><br />	public void salvar(Cliente cliente){<br />		EntityManager em = getEntityManager();<br />		try{<br />em.getTransaction().begin(); //inicia o processo de transacao<br />em.persist(cliente);//permite fazer insercoes e atualizacoes no bd<br />em.getTransaction().commit();//realizo as alteracoes no banco<br />		}catch (Exception e) {<br />em.getTransaction().rollback();// se rolar uma excecao cancelo acao<br />e.printStackTrace();//mostro o percurso de onde veio as excecoes<br />		}finally{<br />			em.close();<br />		}<br />	}<br />	public void excluir(Cliente cliente){<br />		EntityManager em = getEntityManager();<br /><br />		try{<br />	em.getTransaction().begin();<br />	cliente = em.merge(cliente);<br />	em.remove(cliente);<br />	em.getTransaction().commit();<br />		}catch (Exception e) {<br />			em.getTransaction().rollback();<br />		}<br />	}<br />	public void atualizar(Cliente cliente){<br />		EntityManager em = getEntityManager();<br />		try{<br />	em.getTransaction().begin();<br />	em.merge(cliente);<br />	em.getTransaction().commit();<br />	}catch (Exception e) {<br />	em.getTransaction().rollback();<br />		}}<br />	}
  1. Fazendo a persistência de dados no arquivo persistence.xml.
    Precisamos passar as informações do BD, user, password etc para o
    arquivo persistence.xml, assim conseguimos a conexao com o
    nosso BD. Então atualize o arquivo .xml conforme o code abaixo:

org.hibernate.ejb.HibernatePersistence<br />< persistence-unit name="sistemas" transaction-type="RESOURCE_LOCAL"><br />org.hibernate.ejb.HibernatePersistence<br />        <!-- Voce tem que dizer ao persistence.xml onde esta a sua entidade --><br />		br.com.bean.Cliente<br /><br />            <!--Configuracoes de dialeto e conexao--><br />            < property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" /><br />            < property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /><br />            < property name="hibernate.connection.url" value="jdbc:mysql://localhost/sistemas" /><br />            < property name="hibernate.connection.username" value="camilo" /><br />            < property name="hibernate.connection.password" value="integrator" /><br /> <!--Configuracoes de Debug--><br />            < property name="hibernate.show_sql" value="true" /><br />            < property name="hibernate.format_sql" value="true" /><br />            < property name="use_sql_comments" value="true" /><br /><br />        < /properties><br /><br />    < /persistence-unit>
  1. Atualizando a classe TesteCliente.java. Precisamos ter uma classe
    para testar o nosso CRUD com JPA. Para isso teremos uma classe java
    tradicional com o método main. Eu comentei algumas linhas apenas
    para poder testar outros recursos. Mas, levando em conta que sua
    table não há nenhuma informação, vamos executar primeiramente a
    opção salvar.
package br.com.teste;<br /><br />import br.com.bean.Cliente;<br />import br.com.dao.ClienteDAO;<br /><br />public class TesteCliente {<br /><br />	/**<br />	 * @param args<br />	 */<br />	public static void main(String[] args) {<br />		ClienteDAO clidao = new ClienteDAO();<br />		Cliente cliente = new Cliente();<br />	//	cliente.setCidade("salvador");<br />		cliente.setNome("recife");<br />		cliente.setSobrenome("neto");<br />		//cliente.setId(12);<br />		clidao.salvar(cliente);<br />		//clidao.excluir(cliente);<br />	//cliente.setCidade("Sao Paulo");<br />		//cliente.setId(15);<br />		//clidao.atualizar(cliente);<br />	}<br />}

Não Esqueça:

  • Esteja certo que você deu um start no seu BD.
  • não esqueça dos .jars no seu projeto.

Verificando dados no BD

  1. Acesse seu banco de dados e veja
    se a informação inserida realmente consta na tabela. Aqui usei uma
    ferramenta chamada Mysql
    Query Browser para
    facilitar o trabalho com o BD.

Vou ficado por aqui e espero que tenham gostado
do post. Para quem está em primeiro contato com a tecnologia pode
parecer difícil, estranho ou complicado a estrutura JPA, mas
pode ter certeza que realmente é algo bem produtivo que fazer o DAO
na mão grande e melhor ainda usar JPA sem Hibernate.

Abraços e até o próximo post.

é Bacharel em Sistemas de Informação e Especialista em Gestão e Estratégia de Negócios. Trabalha com TI desde 2003 e possui as certificações SCJP 5 e SCM. Trabalhou na IBM Brasil como Analista Programador Java, passou pelo laboratório da Enterprise Computing Lab (ECL) HP como Software Engineer, Ci&amp;T como Engenheiro de Software em projeto JEE. Tem experiência internacional em Índia, Dubai e Londres. Atualmente é cofundador da ITSLabs (www.itslabs.com.br), uma start-up focada na criação de produtos web e mobile para start-ups. Também é autor dos livros "Guia do Exame SCJP", "Guia Prático JEE com Frameworks" e "TDD na prática".

Ver perfil