Canais iMasters

Java + MySQL

Desenvolvendo Java puro com Hibernate e Mysql

Olá, pessoal! Atendendo a pedidos de alguns leitores, hoje veremos o uso mais puro com Hibernate com JPA, ou seja, sem o uso de JSF ou qualquer outro front-end. Vamos criar a nossa velha classe Java com o método main e armazenar as informações em um BD (MySql).

Let's go...

Atenção: não apresentarei como criar um BD ou como configurar o Hibernate no Eclipse, estou considerando que você já tem um ambiente de desenvolvimento pronto para entrar em ação.

Dados do DataBase:

  • Crie um DataBase (usarei uma chamada livraria)
  • Crie uma tabela (usarei uma tabela com o nome camilo)
  • Dados da tabela: id(auto_increment), nome(varchar), cidade(varchar)

Preparação do projeto

  1. Crie um o Java Project no Eclipse com o nome que achar conveniente.
  2. Agora crie uma estrutura de packages conforme a imagem a seguir:

  3. Adicione os arquivos .jars do mysql, hibernate + JPA ao projeto. Clique com o botão direito no projeto escolha Properties e depois clique em JavaBuild. Na tela que aparece, clique em Add external jars (caso nao tenha uma Library para os .jars).

Desenvolvimento/Teste

Agora, crie uma classe Java com nome de Pessoa no package br.com.bean.

package br.com.bean;
/*se os arquivos .jars nao estiver no projeto
* nao será possivel encontrar os imports
*/
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="camilo")
public class Pessoa {

private String nome;
private String cidade;
@Id
int id;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}

Crie uma classe ConexaoHibert.java no package br.com.conexao

private static final SessionFactory sessionFactory;
private static final ThreadLocal<Session> threadLocal =
new ThreadLocal<Session>();
/* observe o que temos de importante
* nesse bloco static, o arquivo
* que possui os dados de conexao com
* o banco de dados hibernateconfig.xml
*/
static{
try{
sessionFactory = new AnnotationConfiguration().
configure("hibernateconfig.xml")
.buildSessionFactory();

}catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}
//retorna uma sessao de comunicacao com o BD
public static Session getInstance(){
Session session = (Session) threadLocal.get();
session = sessionFactory.openSession();
threadLocal.set(session);
return session;
}

Crie uma classe PessoaDAO no package br.com.hibernatedao

package br.com.hibernatedao;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.bean.Pessoa;
import br.com.conexao.ConexaoHibert;

public class PessoaDAO {
private Session session;

public void Salvar(Pessoa p){
//obtem uma sessao
session = ConexaoHibert.getInstance();
Transaction tx = null; //permite transacao com o BD

try{
tx = session.beginTransaction();
session.save(p);
tx.commit();//faz a transacao
}catch (Exception e) {
e.printStackTrace();
//cancela a transcao em caso de falha
tx.rollback();
}finally{
session.close();
}}}

Agora crie uma arquivo .xml conforme o código abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="">
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/livraria</property>
<property name="hibernate.connection.username">camilo</property>
<property name="hibernate.connection.password">123</property>
<mapping class="br.com.bean.Pessoa"/>
</session-factory>
</hibernate-configuration>

Fique atento aos nomes usado na classe Pessoa.java para fazer anotação. Veja que eu tenho o nome da tabela no BD diferente do nome da minha classe Java (fiz de propósito). Então, somos obrigados a definir o nome da tabela, caso contrário a JPA vai considerar o nome da classe.

Crie uma classe no package br.com.teste com o nome de PessoaTest.java.

package br.com.teste;

import br.com.bean.Pessoa;
import br.com.hibernatedao.PessoaDAO;

public class PessoaTest {

/**
* @param args
*/
public static void main(String[] args) {
Pessoa p = new Pessoa();
p.setNome("mel");
p.setCidade("Salvador");
PessoaDAO pdao = new PessoaDAO();
pdao.Salvar(p); }}

Salve e execute a classe PessoaTest.java e verifique se os dados foram inseridos no BD.

Pronto! Bem simples, não? E menos cansativo que usar o velho padrão DAO com JDBC. Espero que tenham gostado!

Abraços e até o próximo artigo!


Comente também

11 Comentários

João Luis Mendes
João Luis Mendes

Ótimo artigo.
Gostaria, se vc puder e claro, que desse dica sobre desenvolvimento de sistemas Desktop em JAVA ou até mesmo dando sua opinião e sobre as tendências para tecnologia JAVA.
Desktop ou Web, bom framework para ambos.

Ats, João Luis.

leandro
leandro

Otimo post...
Oque voce acha a comparação do arquivo xml ao properties?
Vlw

DeKo
DeKo

Ótimo artigo, Parabéns =)

Tiago
Tiago

Muito bom, parabéns!

Túlio
Túlio

Vlw cara, fiquei o dia todo tentando fazer alguma coisa com Hibernate e não saí do lugar. Esse tutorial salvou o dia.

Lucas Santana Carlota
Lucas Santana Carlota

Excelente post! Recomendo também aos developers que usem o Framework Vaadin, usado para desenvolvimento de aplicações ricas para a internet que performa muito bem com o Hibernate.

Luís Gabriel Nascimento Simas
Luís Gabriel Nascimento Simas

Show! let´s trial.

Marcos
Marcos

Lucas ... vc usa o vaadin?... se sim... poderia me tirar uma(s) duvida(s)?

Rafael Ribeiro
Rafael Ribeiro

Só faltou o JUnit para os testes.
Mas não tira o mérito do artigo. Muito bom.

Alex Girão
Alex Girão

Excelente tutorial, gostaria de saber se o Camilo Lopes poderia dispomnibilizar o projeto para download.

John Marques
John Marques

Camilo,

Cara parabéns fico muito simples agora!

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize