Programação Web em Java
Autor: Kayo Bruno | Publicado: 2012-02-11T18:21:00-08:00

Sejam bem vindos, esta é a décima sétima aula de Programação Web em Java.

Depois que vimos uma aplicação funcionando, vamos agora detalhar cada parte do processo. Nosso estudo de caso será o sistema de busca, porém iremos incrementá-lo significativamente.

Décima Sétima Aula: Hibernate e Camada Model

Comecemos estudando a camada Model, ou modelo: O objetivo desta camada é definir as entidades envolvidas e as regras de negócio do programa. Em orientação a objeto, não nos preocupamos inicialmente com a interface do programa, mas sim de um modelo de representação das entidades que fazem parte do projeto. Uma abordagem pedagógica para atacar o problema é escrever de início um lista de requisitos do sistema, discutindo o que ele precisará ter:

Permitir o usuário digitar uma palavra chave e obter uma lista de sites que possuem relação com a palavra digitada usando o motor de busca;
Permitir um usuário cadastrar um ou mais sites definindo uma lista limitada de palavras chaves relacionadas com seu site;
Permitir um administrador do sistema corrigir, adicionar ou eliminar algum site cadastrado no sistema;
Esta será a lista de requisitos que usaremos no nosso exemplo. Para construir o modelo devemos olhar esta lista e identificar as entidades necessárias. Uma abordagem é olhar os substantivos. Estes serão entidades candidatas:

usuário, palavra chave, lista de sites, site, lista de palavras chaves, administrador, sistema de busca, cadastro Esta é uma lista preliminar, já eliminando repetições. O passo seguinte é separar o que é atributo, do que é classe, ficando somente as classes:

Usuário (administrador é um tipo de usuário especial)
Site (Lista de palavras chave é um atributo do site. Lista de Sites é uma coleção de sites)
Motor de busca
Cadastro de Sites
Depois disso iremos definir quais atributos são importantes para estas classes funcionarem de acordo com os requisitos.

Usuário: Id, Nome, Apelido, Senha, Email, Nível
Site: Id, Nome, Descrição, Url, KeyWords, Responsável (pelo cadastro)
Motor de Busca: Resultado da Busca, KeyWords (a serem encontrados)
Cadastro de Sites: Usuário responsável
Implementamos então as classes de modo que sejam manipuláveis pelo Hibernate. Este framework é responsável pela persistência, isso é, pelo armazenamento dos objetos criados na memória, para o banco de dados relacional. As regras para que as classes sejam manipuláveis pelo Hibernate são os seguintes:

A classe deverá ser um Java Bean definindo os atributos como dados privados e com funções públicas Getters e Setters. (veja em wikipedia as regras de uma classe Java Bean);
A classe deverá ter um construtor sem parâmetros para permitir o Hibernate criar objetos;
Deve possuir uma chave primária: isso é um campo id que armazenará um valor único que será gerado pelo Hibernate. A funcão setID() é privada, pois somente o Hibernate deverá modificar o campo chave.
A classe Motor de Busca e cadastro de Site não será persistido. Já que não é necessário a manutenção da busca realizada entre as chamadas.
No nosso exemplo teremos uma nova classe Usuario:

Usuario.class

Observe no código que criei uma propriedade “sites” com um HashSet. Esta propriedade irá auxiliar durante a manutenção dos sites que um usuário possui.

private Set sites = new HashSet();
E criamos o arquivo Usuario.hbm.xml na pasta sbusca. Este arquivo indica ao Hibernate o funcionamento da persistência da classe Usuário criada:

Usuario.hbm.xml

Além disso devemos incluir ao arquivo hibernate.cfg.xml:

&lt;mapping resource=”sbusca/Usuario.hbm.xml”&gt; &lt;/mapping&gt;

Após todas estas codificações teremos duas entidades: Usuário e Sites. Além delas vamos definir uma classe chamada MotorBusca, que fará a lógica mais importante do sistema, isto é, a busca em si. Não é nada complicado e seria possível fazer o código diretamente nos Actions do Struts, mas vamos abusar um pouco de orientação a objeto. Olhando este exemplo simples quem sabe em um trabalho mais complexo você não se intimide. A classe deverá ter: MotorBusca:

Propriedade keyword: String e método executar() com e sem parâmetro;
E o código da classe ficará:

MotorBusca.java

Já definimos nesta aula um modelo quase completo para o nosso sistema. Deixei para depois somente o Cadastro de Sites, pois para implementá-lo será necessário falarmos de um CRUD, também conhecida como tela de Cadastro. Iremos ter uma aula somente sobre isso, quando voltaremos para tornar completo o modelo.

Para que você possa verificar se a busca está funcionando, criei uma classe simples de teste:

TesteBusca.java

Dúvidas? Comente!
Pois é senhores, esta é a última aula do curso de programação para Web em java.