Capítulo 4

Persistindo os dados com o Hibernate

4.1 - A camada de persistência do projeto

Nossa primeira tarefa será cadastrar, atualizar, listar e remover produtos do sistema. Para realizá-la, precisamos gravar as informações dos produtos no banco de dados. Para esse curso, utilizaremos o banco de dados MySQL, um banco de dados gratuito, de código aberto, simples e muito utilizado por diversas empresas.

Para maiores informações e para fazer o download, acesse a URL:

http://www.mysql.com/

Depois de instalado e configurado, o MySQL pode ser acessado com o usuário chamado root e a senha vazia (sem senha). Para testar, basta abrir o terminal e digitar o comando:

mysql -u root

Esse comando tenta fazer o login no mysql, informando o usuário root (-u root) e omitindo a senha, já que esse usuário não tem senha.

Para nos comunicarmos com o banco de dados, seja para uma consulta ou para algum tipo de alteração de dado, podemos usar a API que o Java SE disponibiliza, o JDBC. Um dos problemas do JDBC, quando usado diretamente, conforme mostramos no curso FJ-21, é que ele é muito trabalhoso além de que precisamos gerenciar muitos recursos importantes. Todas as informações têm de ser passadas uma a uma.

Para evitar ter que ficar fazendo todas as chamadas ao JDBC e ganharmos tempo e produtividade, vamos utilizar um framework para a persistência que já traz muitas funcionalidades já implementadas. O framework que utilizaremos será o Hibernate e ele será o responsável por fazer as chamadas à API do JDBC.

Vale lembrar que, tudo que é visto aqui no curso, é aplicável a outros frameworks de persistência, como seria o caso de usar o iBatis ou então o EclipseLink através de JPA. É muito importante perceber como vamos integrar todas as nossas ferramentas de maneira coesa e desacoplada.

4.2 - Sobre o Hibernate

O Hibernate é um framework ORM - Object Relational Mapping. É uma ferramenta que nos ajuda a persistir objetos Java em um banco de dados relacional. O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do banco e o Hibernate faz todo o acesso ao banco, gerando inclusive os comandos SQL necessários.

O Hibernate é um projeto opensource do grupo JBoss com muitos anos de história e liderança no mercado Java. Recentemente, boa parte das idéias do Hibernate e outros frameworks ORM foram padronizadas em uma especifição oficial do Java, a JPA - Java Persistence API. A JPA é uma especificação do JCP e possui várias implementações (o Hibernate, o Oracle Toplink, EclipseLink, OpenJPA etc).

Mais sobre Hibernate

Neste curso, veremos muitos tópicos sobre Hibernate e como integrá-lo em nosso projeto com VRaptor3. Para tópicos avançados e mais detalhes, consulte o treinamento FJ-25:

http://www.caelum.com.br/curso/fj25

Nova editora Casa do Código com livros de uma forma diferente

Editoras tradicionais pouco ligam para ebooks e novas tecnologias. Não conhecem programação para revisar os livros tecnicamente a fundo. Não têm anos de experiência em didáticas com cursos.
Conheça a Casa do Código, uma editora diferente, com curadoria da Caelum e obsessão por livros de qualidade a preços justos.

Casa do Código, ebook com preço de ebook.

4.3 - Preparando o Hibernate

Para preparar o Hibernate, será necessário baixar dois ZIPs do site do Hibernate. Cada ZIP representa um projeto diferente.

O primeiro será o Hibernate Core, que se chama hibernate-distribution-XXX.zip. O segundo ZIP será do projeto Hibernate Annotations, já que queremos configurar nosso projeto com as anotações da JPA. Esse ZIP chama-se hibernate-annotations-XXX.zip. Faça os downloads diretamente em:

http://www.hibernate.org

Depois de fazer o download desses dois zips, basta descompactá-los e utilizar os JAR's que estão dentro de cada projeto. No exercício abaixo veremos quais JARs vamos precisar. A partir do Hibernate 3.5, esses jars todos vem numa única distribuição, a core.

Configurando o mecanismo de logging

O Hibernate utiliza o SL4J - Simple Logging Facade for Java - para o mecanismo de logging. Ele serve apenas como uma fachada para vários frameworks de logging, por exemplo o Log4J e o java.util.logging.

No nosso projeto utilizaremos o Log4J, então precisamos baixar mais dois zips. O primeiro é o Log4J, do grupo Apache. O segundo é o próprio SL4J, que contêm o jar que faz o binding do SL4J com o Log4J.

Configurando o driver do MySQL

Apesar de toda facilidade que o Hibernate nos trará, por baixo dos panos ele faz chamadas ao JDBC. Portanto, para que nossa aplicação se conecte no banco de dados, precisamos do driver do MySQL no classpath. O driver é a implementação JDBC que será utilizada. Cada banco de dados possui a sua implementação, e ela deve ser baixada do site do próprio banco de dados. Faça o download do mysql jdbc driver.

Mais sobre JDBC e Drivers

Para mais informações sobre o JDBC e como funcionam os Drivers, consulte o capítulo inicial da apostila do curso FJ-21.

4.4 - Configurando o Hibernate

Para configurar o Hibernate, podemos utilizar ou um arquivo .properties ou um arquivo XML.

O arquivo de properties é mais simples, mais fácil de se criar, mas uma das desvantagens é que ele não consegue configurar tudo que queremos, por exemplo as entidades. As entidades têm que ser configuradas no código, e as outras informações no arquivo de properties.

Já o XML, por mais que seja um pouco mais difícil em relação ao properties, permite que toda a configuração seja feita nele. Por isso faremos nossa configuração no XML. O arquivo XML que o Hibernate procurará será o hibernate.cfg.xml e ele deve estar no classpath.

Para nosso caso, vamos seguir a convenção e criar o arquivo hibernate.cfg.xml na pasta src, dentro do nosso projeto. O conteúdo do arquivo será esse:

<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.username">
      root
    </property>
    <property name="hibernate.connection.password">
    </property>
    <property name="hibernate.connection.url">
      jdbc:mysql://localhost/fj28
    </property>
    <property name="hibernate.connection.driver_class">
      com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.dialect">
      org.hibernate.dialect.MySQL5InnoDBDialect
    </property>
    
    <property name="hibernate.hbm2ddl.auto">update</property>
    
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
  </session-factory>
</hibernate-configuration>

As configurações que passamos nesse arquivo são parecidas quando queremos nos conectar a um banco de dados. Para conectar em um banco de dados, precisamos informar qual é o usuário, a senha, algumas informações do banco, como host, porta, etc.

Um detalhe importante da nossa configuração é o banco de dados que foi passado. Na configuração hibernate.connection.url foi passado o nome do database que utilizaremos. Para esse caso escolhemos o database fj28.

Abaixo segue a descrição de todas as configurações que usamos.

Existem muitas outras configurações possíveis. Para maiores detalhes, acesse a documentação do Hibernate.

4.5 - Exercícios: Configurando o banco

  1. Todos os jars necessários para usar o hibernate já estão no projeto base que usamos. O hibernate.cfg.xml também já existe na pasta src. Caso você esteja fazendo essa apostila em casa, baixe os JARs de acordo com as orientações desse capítulo e crie o hibernate.cfg.xml similarmente.

  2. Conecte-se no banco de dados para verificar se o database fj28 existe. Se ele não existir, teremos que criá-lo. Primeiro, abra um terminal pelo ícone no Desktop. Depois digite:

    mysql -u root
    

    Depois de conectado, vamos verificar os bancos de dados disponíveis:

    mysql> show databases;
    

    Se o database fj28 aparecer, digite:

    mysql> drop database fj28;
    
    mysql> create database fj28;
    

Já conhece os cursos online Alura?

A Alura oferece centenas de cursos online em sua plataforma exclusiva de ensino que favorece o aprendizado com a qualidade reconhecida da Caelum. Você pode escolher um curso nas áreas de Java, Front-end, Ruby, Web, Mobile, .NET, PHP e outros, com um plano que dá acesso a todos os cursos.

Conheça os cursos online Alura.