Dev (Back & Front)ARTIGO

Praticando Hibernate com Annotations + JSF – melhorando nossa newsletter

Ola, pessoal!! Dando continuidade ao artigo anterior,
resolvi dar um update na nossa NewsLetter. No artigo anterior,
desenvolvemos usando apenas Hibernate + JSF e tendo o MySql como BD.
Hoje veremos um recurso que está “bombando” no mercado: os
Annotations. Realmente esse recurso veio para ficar e usar Hibernate puro
e é bem mais trabalhoso, sem falar que ficar criando arquivos .xml para
mapeamento com o BD nao é algo tão confortável assim. Então,
veremos o que Annotations pode fazer por nós, desenvolvedores. 

Ah, um ponto importante: não vou repetir todo o
conteúdo do artigo anterior, como criação das paginas JSF, do
Bean, dos arquivos Hibernate etc. Irei apresentar apenas os arquivos
que devem sofrer alterações e o que deve ser acrescentado na
aplicação para que a nova tecnologia entre em cena. Se você perdeu o
post anterior, ele está logo abaixo:

Artigo recomendado: JSF
+ Hibernate + MySql no Eclipse


O que é Java Annotations?

An annotation,
in the Java
computer programming language
,
is a special form of syntactic metadata
that can be added to Java source code.[1]
Classes, methods, variables, parameters and packages may be
annotated. Unlike Javadoc
tags, Java annotations can be reflective
in that they can be embedded in class
files
generated by the
compiler and may be retained by the Java VM to be made retrievable at
run-time (fonte:
http://en.wikipedia.org/wiki/Java_annotation)


  • Antes de começar, você precisa ir no site
    hibernate.org e fazer o download do package Hibernate Annotations. A versão que estamos usando aqui é 3.4.0 GA .

    Download – https://www.hibernate.org/6.html

  • Em seguida, descompacte o arquivo e copie os arquivos
    .jars de lib e cole no lib do seu projeto. Na verdade, precisamos
    apenas de dois arquivos .jars: hibernate-annotations.jar
    e o ejb3-persistence.jar

Desenvolvimento

01. Primeiro passo agora é alterar o Bean. Então, abra o
seu arquivo bean, que no nosso caso é NewsLetter.java, no package
br.com.bean, e altere o arquivo conforme o código a seguir:

import javax.persistence.Column;<br /><br />import javax.persistence.Entity;<br /><br />import javax.persistence.GeneratedValue;<br /><br />import javax.persistence.Id;<br /><br />import javax.persistence.Table;<br /><br />@Entity<br /><br />@Table (name="newsletter")<br /><br />public class NewsLetter {<br /><br />@Column (name="nome")<br /><br />String nome;<br /><br />@Column(name="email")<br /><br />String email;<br /><br />@Id<br /><br />@GeneratedValue<br /><br />int id;<br /><br />public String getNome() {<br /><br />return nome;<br /><br />}<br /><br />public void setNome(String nome) {<br /><br />this.nome = nome;<br /><br />}<br /><br />public String getEmail() {<br /><br />return email;<br /><br />}<br /><br />public void setEmail(String email) {<br /><br />this.email = email;<br /><br />}<br /><br />public int getId() {<br /><br />return id;<br /><br />}<br /><br />public void setId(int id) {<br /><br />this.id = id;<br /><br />}<br /><br />}


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
    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 primária da sua tabela;
  • @Column: mapeia com as colunas da sua tabela. Segue a
    mesma regra de table; quando tiver colunas com nomes diferentes, esse
    campo é obrigatório, caso contrario, non-required.

Precisamos fazer umas mudanças na classe de conexão. Abra o arquivo ConexaoFactory.java e altere, conforme abaixo:

package br.com.util;<br /><br />import org.hibernate.Session;<br /><br />import org.hibernate.SessionFactory;<br /><br />import org.hibernate.cfg.AnnotationConfiguration;<br /><br />public class ConexaoFactory {<br /><br />private static final SessionFactory sessionfactory;<br /><br />private static final ThreadLocal threadlocal = new ThreadLocal();<br /><br />static{<br /><br />try{<br /><br />//agora é Annotations que comanda<br /><br />sessionfactory = new AnnotationConfiguration()<br /><br />.configure("hibernate.cfg.xml").buildSessionFactory();<br /><br />}catch (Throwable e) {<br /><br />throw new ExceptionInInitializerError(e);<br /><br />}<br /><br />}<br /><br />public static Session getInstance(){<br /><br />Session session = (Session)threadlocal.get();<br /><br />session = sessionfactory.openSession();<br /><br />threadlocal.set(session);<br /><br />return session;<br /><br />}<br /><br />}

Nessa classe, usamos a classe AnnotationConfiguraton()
para que ele aponte para as anotações no arquivo NewsLetter.java,
atualizado anteriormente com os Annotations.

Precisamos apenas fazer uma pequena alteração no
arquivo de configuração do hibernate que criamos no artigo anterior,
o arquivo hibernate.cfg.xml.

Lembra que ele tinha uma referência
para o arquivo visitante.hbm.xml que este arquivo tinha como
objetivo fazer o mapeamento com o BD? Pois é, ele será descartado
a partir de agora, se quiser pode até deletar do projeto. E deixe o
seu arquivo hibernate.cfg.xml conforme o código abaixo:

<hibernate-configuration><br /><br /><session-factory><br /><br /><property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property><br /><br /><property name="hibernate.connection.url">jdbc:mysql://localhost/livraria</property><br /><br /><property name="hibernate.connection.username">camilo</property><br /><br /><property name="hibernate.connection.password">bahia</property><br /><br /><!-- USADO PELO HIBERNATE PARA SE COMUNICAR COM O BD --><br /><br /><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><br /><br /><mapping class="br.com.bean.NewsLetter"/><br /><br /></session-factory><br /><br /></hibernate-configuration>

Apenas removemos as tags que apontavam para o arquivo
de mapeamento e inserimos a classe bean que possui um annotation
mapeamendo o nosso BD.

Salve todas as alterações. Seu projeto deve estar
conforme a imagem a seguir:

Note que não temos mais o arquivo visitantes.hbm.xml,
como no último artigo.

Agora pode testar; o resultado é o mesmo, ou seja, ele
deve cadastrar tranquilamente o usuário, porém agora é com Annotations, e não mais com Hibernate puro.

Fico por aqui e espero que tenham gostado! E se você está começando a estudar o framework, aqui pode ser
seu ponto de partida ;).

Abraços e até a próxima!

é 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