Ola Pessoal!! Dando continuidade ao post anterior, resolvi dar um update na nossa NewsLetter. No post anterior desenvolvemos usando apenas Hibernate + JSF e tendo o MySql como BD. Hoje veremos um recurso que está “bombando” no mercado sao os Annotations. Realmente vieram para ficar e usar Hibernate puro é 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 nos desenvolvedores. Veremos o básico da tecnologia Annotations nesse post.
Ahh, um ponto importante não vou repetir todo o conteudo do post anterior tais como :criaçao 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 vc perdeu o post anterior, ele está logo abaixo:
Post Recomendado
JSF + Hibernate + MySql no Eclipse
O que é Java Annotations? (abaixo a técnica de reutilização da informação 😉 )
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
Download – https://www.hibernate.org/6.html
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 .
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
1. 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 code a seguir:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table (name="newsletter")
public class NewsLetter {
@Column (name="nome")
String nome;
@Column(name="email")
String email;
@Id
@GeneratedValue
int id;
public String getNome() {
return nome;}
public void setNome(String nome) {
this.nome = nome; }
public String getEmail() {
return email;}
public void setEmail(String email) {
this.email = email;}
public int getId() {
return id; }
public void setId(int id) {
this.id = id; }}
Explicando as anotacoes:
@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 nao 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 ;
2.Precisamos fazer umas mudanças na classe de conexao, entao abra o arquivo ConexaoFactory.java e altere conforme abaixo
package br.com.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class ConexaoFactory {
private static final SessionFactory sessionfactory;
private static final ThreadLocal threadlocal = new ThreadLocal();
static{
try{
//agora é Annotations que comanda
sessionfactory = new AnnotationConfiguration()
.configure("hibernate.cfg.xml").buildSessionFactory();
}catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}}
public static Session getInstance(){
Session session = (Session)threadlocal.get();
session = sessionfactory.openSession();
threadlocal.set(session);
return session;
}}
Nessa classe usamos a classe AnnotationConfiguration()para que ele aponte para as anotacoes no arquivo NewsLetter.java atualizado anteriormente com os annotations.
3.Precisamos apenas fazer uma pequena alteração no arquivo de configuração do hibernate que criamos no post anterior o arquivo hibernate.cfg.xml. Lembra que ele tinha uma referencia 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 ate deletar do projeto. E deixe o seu arquivo hibernate.cfg.xml conforme o code abaixo:
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost/livraria
camilo
bahia
org.hibernate.dialect.MySQLDialect
Apenas removemos as tags que apontavam para o arquivo de mapeamento e inserimos a classe bean que possui um annotation mapeamendo o nosso BD.
4.Salve todas as alteracoes, seu projeto deve estar conforme a imagem a seguir:
Note que não temos mais o arquivo visitantes.hbm.xml, como tinhamos no ultimo post.
Agora pode testar o resultado é o mesmo, ou seja, ele deve cadastrar tranquilamente o usuário, porem agora é com annotations e nao mais com hibernate puro.
Vou ficando por aqui e espero que tenham gostado do post. E se vc está começando a estudar o framework aqui pode ser seu ponto de partida ;).
abracos e até o próximo post…