Criteria Hibernate parte II

opa! Pessoal,

Neste post veremos mais algumas restrições importantes que temos na API Criteria. Não deixarei de apresentar os codes, mais ainda não faremos nada pratico com o BD, reservei este momento para um outro post, onde vamos “respirar” toda série de modo mais prático em um único post, e focar mais no entendimento e uso do Criteria. Principalmente se você está começando agora nada melhor que ir passo-passo.

Lets go…

note: Uma coisa é certa: Quer aprender e melhorar seus conhecimentos? use a documentação, ela é tão explicativa quanto um tutorial passo-passo, uma das melhores documentações que já li, e o segredo não é decorar e sim ir implementado com base nas necessidade, crie situações (caso não tenha) e vá implementado aos poucos, quando menos esperar já vai está dominando as principais. Essa é minha dica. 🙂

Restrições com Criteria API

Uma outra restrição bem legal é o uso do >=, >, <=,< que fazemos no SQL,HQL etc. No Criteria temos métodos que nos ajudam na implementação desses operadores: gt(),ge(),lt(),le().

  • gt() = maior que

  • ge() = maior ou igual que

  • lt() = menor que

  • le() = menor ou igual que

Saber de onde os métodos pertencem é tão importante quando saber usá-los. Os citados acima vem da classe Resctrictions. Exemplo:

crit.add(Restrictions.ge(“preco”, new Double(100.00));

A leitura é bem simples: retorna todos os produtos com o preço maior ou igual 100.00. um dos pontos importante no uso de Criteria é quando precisamos usar AND e OR nas restrições.

crit.add(Restrictions.gt(“preco” new Double(100.0));

crit.add(Restrictions.like(“nome”, “smart%”));

List lista = crit.list();

A leitura é a seguinte: retorne produtos com o preco maior que 100.0 e (AND) que tenha o nome “smart” como parte da String.

Agora se precisarmos do OR, veja como fica:

Criterion preco = Restrictions.gt(“preco”, new Double(100.0));

Criterion nome = Resctrictions.like(“nome”, “smart%”);

LogicalExpression orExp = Resctrictions.or(preco,nome);

crit.add(orExp);

List list = crit.list();

A lógica é a seguinte: retorne produtos com preco maior que 100.0 ou que tenha “smart” na palavra. Na linha 4 adicionamos o resultado. Então a linha 2 somente é executada caso a primeira seja falsa.

Quando queremos mais que duas diferentes sequencias de OR poderíamos usar a classe Disjunction que fica em org.hibernate.Disjunction para representar uma disjunction. Sem sombras de duvidas usar disjunction é mais conveniente que vários OR no código, veja como fica:

Criterion preco = Resctrictions.gt(“preco”, new Double(100.0));

Criterion nome = Resctrictions.like(“nome”, “smart%”);

Criterion fornecedor = Restrictions.like(“fornecedor”, “nokia%”);

Disjunction dis = Resctrictions.disjunction();

dis.add(preco);

dis.add(nome);

dis.add(fornecedor);

cri.add(dis)

List lista = crit.list();

A leitura do código acima seria:

Retorne os produtos que tenha o preço maior que 100.0 ou (or) que tenha na parte da string a palavra “smart” ou que tenha na propriedade fornecedor a palavra “nokia”. Para fazer com o AND usamos o método conjunction() da classe Resctrictions.

Conjunction conj = Restrictions.conjuction();

Apenas alteramos de disjunction  para  a linha acima e assim temos a  clausula AND.

Vou ficando por aqui e espero que tenham gostado do post que foi simples e rápido.

See you next post, guys!!

abracos,

Criteria Hibernate na Prática

olá Pessoal,

Se você está iniciando com Hibernate um dia vai ser apresentado ao Criteria. Realmente quem usa Criteria não quer voltar ao SQL para as funções mais básicas, e sim para os casos extremos onde o Criteria não atende a um requisito que só temos no SQL. Então neste post, vou mostrar um pouco o que se pode fazer com o Criteria nas suas aplicações Java. Farei uma breve introdução ao Criteria neste primeiro post, no próximo, vamos colocar mão na massa de fato. Mas, por enquanto quero que conheçam um pouco a sintaxe.

Lets go…

Criteria

Criteria Query API permite construir query expression em Java permitindo assim a checagem em tempo de compilação, ao contrário do HQL ou SQL que não permite. Criteria API permite de forma programática construir objetos query a partir da interface org.hibernate.Criteria. Esta interface define os métodos disponíveis que precisamos trabalhar com Criteria.

Para persistir um objeto da classe, usamos o método createCriteria() que retorna um objeto Criteria que permite ter acesso a instância de persistência da classe. O createCriteria() pertence a interface Session. Então se preciso retornar todas propriedades de uma classe com Criteria, seria assim:

Criteria critera = session.createCriteria(Produto.class)

List lista = criteria.list();

Mais simples que HQL. Este é o mesmo resultado com o from Produtos que executamos no HQL e que fazemos no SQL: SELECT * from mytable.

Vamos dizer que precisamos obter os produtos que tenham no nome “smart phone” então precisamos conhecer o método add() da classe Criteria que tem como objetivo adicionar uma restrição em seu argumento. Uma outra classe importante é Restrictions class do pacote org.hibernate.Criterion que possui métodos static para as condições de restrições que precisamos. Veja o trecho do código:

Criteria crit = sesion.createCriteria(Produto.class)

crti.add(Resctrictions.eq(“nome”, “smart phone”);

List list = crit.list();

Explicando o código:

Na primeira linha criamos o objeto Criteria que fez a persistência em nossa entidade. Na linha dois costumo ler da seguinte forma para facilitar a compreensão: “adicionando uma restrição a class persistida”. Na linha 3 é o resultado da restrição.

Um ponto importante é que não podemos fazer uma restrição de resultado usando o método eq/ne para propriedades com o valor null. Para isso há um método static especifico o isNull() e o isNotNull().

Para realizar busca temos os métodos like() e ilike() estes servem quando precisamos buscar algo fornecendo “meia duzia” de informação para o buscador. Exemplo: traga todos os produtos que tem na palavra “smart”. A diferença é que o ilike é case-insensitive.

Outro detalhe importante que podemos informar aonde buscaremos a palavra, ou seja, no inicio, no final, ser exato, ou em qualquer lugar. Exemplo:

Criteria crit = session.createCriteria(Produto.class)

crit.add(Restrictions.like(“nome”, “smart%”));

List list = crit.list();

% informa que busca por partes da string. No exemplo a seguir digo para buscar no final da String.

Crit.add(Restrictions.like(“nome”, “smart”, MatchMode.end));

MatchMode é um tipo de enumeration que possui 4 tipos diferentes de match: anywhere, end, exact, start.

Done! E assim finalizo o primeiro post sobre Criteria, no próximo veremos mais algumas restrições interessantes.

Espero que tenham gostado do post.

Abracos, see you next post! 🙂

Iniciando com Hibernate

olá Pessoal,

Estarei dando inicio à uma série de posts sobre o Hibernate. O motivo é que sofri no inicio como todo iniciante. Principalmente nos princípios básicos.E ainda tenho meus sofrimentos quando preciso de algo mais avançado e bem especifico a um problema ou sistema legado onde o Hibernate está presente, dai vem o nosso amigo google, consultando os colegas mais vividos com a tecnologia etc. Mas, nos posts vou buscar dar uma luz para quem acha que está na escuridão, nesse inicio com o framework. Apesar que já temos alguns posts usando o Hibernate que podem ser visto aqui. Hoje veremos como usar Hibernate e para não ficar um post grande e cansativo, vou limitar a recursos simples do framework. Então veremos como configurar o Hibernate em um projeto java e depois ver o “brinquedo” funcionando.

Lets go…

Requisitos

  • Instalação Mysql 5 ou superior
  • Instalação Java 5 ou superior
  • Eclipse (qualquer versão)

Note

Usarei o Hibernate 3.2.x, pois é que tenho aqui nos meus projetos. Como ainda não tive a necessidade baixar a versão mais recente, mas para o que vamos fazer aqui, não precisa ser a versão mais recente.

Não usarei annotations nest post, até pq temos um post já sobre o assunto, então vou usar mapeamento, o motivo é que na minha opinião todos que vão iniciar com Hibernate precisar conhecer os mapeamentos XML, antes de ir para os Annotations. Os mapeamentos ainda é uma realidade em sistema legado, e vale lembrar que sistema legado eles representam uma boa parcela de oportunidades no mercado Java que pedem o Hibernate como framework. Não esqueça disso. Pois, um dia você vai precisar entender o mapeamento que alguém fez há alguns anos atras.


Preparação do ambiente

  1. primeiro passo é baixar o hibernate core no site www.hibernate.org para esse exemplo estou usando a versao Hibernate 3.2.1.GA e o Hibernate tools 3.24.ga
  2. Descompacte os arquivos
  3. abra o eclipse
  4. vá em windows preferences e digite user no campo de filter do eclipse
  5. Clique em New e em nome coloque Hibernate 3.2
  6. Agora vamos adicionar os .jars a essa biblioteca clique em add external jars.
  7. Bem, eu poderia simplesmente dizer selecione todos os arquivos da pasta lib do hibernate, mas não é necessário pois muitos arquivos nem serão executados. Veja na imagem abaixo os arquivos que vc precisa adicionar
  8. Mas, como vc sabe que sao esses arquivos Camilo? Simples, tem um arquivo chamado _README.txt na pasta lib do hibernate e lá ele informa quais arquivos são required. Se tiver dúvida dar uma olhada.
  9. Detalhe importante o arquivo hibernate3.jar não fica em lib e tb não consta na lista de arquivo required no _README.txt, mas vc deve adiciona-lo ele é essencial. Esta informação você consegue na documentação do Hibernate.
  10. Uma vez pronto a library com o Hibernate, faça o mesmo para o Driver MySql. Crie uma nova library e adicione o .jar do Banco de Dados. Obtenha o Driver do site da MySQL: http://www.mysql.com/downloads/connector/j/5.1.html
  11. Crie um Java Project no Eclipse
  12. adicione as bibliotecas no seu projeto. Clique com o botão direito e vá em propriedades ==> Java Build, na aba escola libraries e clique em add library ==> user library e marque as library que acabamos de criar.

Desenvolvimento

  1. Chegamos na parte mais divertida – “desenvolvimento”. Crie um package em src chamado br.com.bean
  2. E crie uma classe chamada de Message (sem o metodo main). Agora deixe a classe conforme abaixo.
    package br.com.bean;
    
    public class Message {
    	private String message;
    
    	public Message() {
    		// TODO Auto-generated constructor stub
    	}
    	public Message(String message) {
    		this.message = message;
    	}
    	public String getMessage() {
    		return message;
    	}
    
    	public void setMessage(String message) {
    		this.message = message;
    	}
    
    }
  3. Crie uma classe chamada TesteMessage (com o método main) e deixe conforme abaixo.
  4. 
    package br.com.bean;
    
    
    
    import org.hibernate.Session;
    
    import org.hibernate.SessionFactory;
    
    import org.hibernate.cfg.Configuration;
    
    
    
    public class PopulaMessage {
    
    
    
    	/**
    
    	 * @param args
    
    	 */
    
    	public static void main(String[] args) {
    
    		SessionFactory factory = new Configuration().configure().buildSessionFactory();
    
    			Session session = factory.openSession(); 
    
    			session.beginTransaction(); 
    
    		Message m1 = new Message("lopes"); 
    
    			session.save(m1);//salvando o objetos persistenced 
    
    			session.getTransaction().commit();
    
    			session.close();
    
    		System.out.println("Salvo com sucesso no banco de dados");
    
    	}
    
    
    }
    
    
    
    
  5. por enquanto s isso, vamos agora criar os arquivos de configuração do hibernate com o BD + o mapeamento com classe.

Configuração Hibernate

  1. Abra a perspective Hibernate e depois vá em File ==> New ==> e escolha a opção conforme a imagem abaixo:
  2. clique em next.Escolha a classe que será mapeada, ou seja, Message. clique em add class
  3. clique em finish
  4. E agora adicione os codes abaixo(tive que colocar no formato de imagem, para evitar que o código fosse quebrado pelo plugin):
  5. Vamos criar o arquivo de configuracao Hibernate com o BD para isso faça o mesmo processo do passo 1, porem escolha a opcao conforme a imagem a seguir:
  6. Deixe o nome padrao sugerido e clique em next
  7. agora escolha o projeto e o package. No meu caso será MessageEx/src .
  8. Na próxima tela precisamos configurar o BD.Então deixe conforme a imagem a seguir:
  9. Apos ter configurado clique em finish
  10. Adicione o code a seguir no arquivo de configuração (hibernate.cfg.xml). É apenas o mapeamento da classe que representa nossa table no BD. Afinal de contas o hibernate precisa saber em que tabela ele deve obter/inserir informações, por isso usamos o mapeamento.

    <mapping resource=”mapping.hbm.xml”/>

    Ficando assim todo o codigo:

Testando

  1. para testar é bem simples. Vá na classe TesteMessage.java e clique em Run==> Java Application.
  2. Em seguida verifique se a informação foi inserida no BD. Não esqueça de dar um start no BD. Caso contrario receberá várias exceções.

Bom, vou ficando por aqui espero que o post tenha ajudado e motivado aqueles que estão iniciando com Hibernate. Abracos e até o proximo post. 🙂

Eclipse Helios + TomCat Ubuntu

olá Pessoal,

Neste post mostarei como instalar o Eclipse Helios e o TomCat 7 no Ubuntu, apesar que eu tenho outros posts parecidos, mas depender da distribuição ou versão dos software a serem instalados, alguns passos podem sofrer alterações. O objetivo aqui é mostrar para quem tem interesse em ter um cenário com Linux para ambiente de desenvolvimento com Java na plataforma JEE. Eu particulamente não uso o Windows como ambiente de desenvolvimento há algum tempo e não consigo mais usar o sistema do Tio Gates para esse fim. As vantagens já conhecemos, porém quero destacar que conheço muitos programadores que já tentou, mas antes da primeira semana retornou ao Windows, por questão de zona de conforto. Confesso que passei por isso, e retornei varias vezes para esta “zona”, porém chegou um dia a superação foi fator decisivo, quando fui trabalhar em uma empresa onde o uso do Linux era default. Daí fiquei no beco sem saída e sair de lá com “mal hábito”, hoje pode dizer que eu e o pinguim somos já amigos, não grande amigos, porém amigos. Vamos deixar de papo e ir para o que importa rs.

Lets go…

Post Recomendado

Para instalar o Eclipse Helios no Ubuntu sem complicação, você vai no url a seguir e faz o download com base se seu ambiente é 32-bits ou 64.

http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1

após o download ter concluído, normalmente ele vai para a pasta de Downloads caso esteja usando o Firefox.

Antes de mais nada vamos dar permissão 755 para o arquivo ainda zipado então digite:

sudo chmod 755 eclipse-jee-helios-SR1-linux-gtk.tar.gz

Ele estava assim:

Vamos descompactar o arquivo, normalmente eu coloco /opt, porem você pode escolher o diretorio de sua preferencia. Para descompactar é bem simples, caso não goste de executar comandos, faça como você faz no Windows, botão direito e mande extrair.

Se preferir segue o comando:

sudo tar xvfz eclipse-jee-helios-SR1-linux-gtk.tar.gz -C /opt

Antes de darmos a permissão vamos criar um link (atalho) para o Eclipse, no diretorio /usr/bin. Digite, os comandos abaixo:

Quando o gedit abrir insira deixe conforme a imagem a seguir:

Dando a permissao para executar o arquivo “eclipse” que acabamos de criar: sudo chmod 755 /usr/bin/eclipse

Agora vamos criar um link simbolico para o menu de Applications do Ubuntu, digite:

sudo gedit /usr/share/applications/eclipse.desktop

E configure seu arquivo semelhante à imagem abaixo, a diferença vai estar no arquivo imagem PNG que gera o icone, que depender da versão que baixou, o diretorio pode mudar de nome, verifique navegando pela pasta do eclipse e atualize:

Abrindo o eclipse e escolha seu workspace, pode ser o padrao

Clique em OK para abrir o Eclipse.

Já podemos trabalhar com ele, e fazer nossos projetos Java Project uma vez que já temos o Java Instalado. Mas, vamos precisar do TomCat para nossos Projetos JEE. Então vamos instalar o TomCat direto do Eclipse.

TomCat no Eclipse

Para instalar o TomCat é muito simples, vamos pegar a versão mais recente, que será o TomCat 7. Você pode ir no site do TomCat e baixar o arquivo e descompactar ou usar o comando wget para fazer o download diretamente, veja:

wget http://ftp.unicamp.br/pub/apache/tomcat/tomcat-7/v7.0.5-beta/bin/apache-tomcat-7.0.5.tar.gz

O link direto é esse: http://tomcat.apache.org/download-70.cgi no final das contas vai dar no mesmo, se reparar o link la no site do TomCat vai apontar para o link do wget acima.

Faça o mesmo processo que fizemos com o Eclipse, dê a permissão 755 para o arquivo ainda zipado, depois descompacte o arquivo e em seguida mova ele para o diretorio /opt

Vamos mudar de nome para ficar melhor para trabalhar digite:

sudo mv /opt/apache-tomcat-7.0.5/ /opt/tomcat7.0.5

Agora vamos atribuir que o dono do grupo será o meu usuario camilo, então digite:

sudo chown -R camilo /opt/tomcat7.0.5/

E agora vamos dar permissao para execução dos scripts do TomCat:

sudo chmod +x /opt/tomcat7.0.5//bin/*.sh

Vá para o Eclipse, e em Windows ==> Preferences.

E clique em server, conforme a imagem a seguir:

Clique em Add a direita e escolha o Tomcat 7:

E em seguida informe o local de instalação do TomCat deixando conforme a imagem a seguir:

Agora vamos criar um projeto JEE, para ver se funciona de fato. Veja,:

Dê o nome ao seu projeto, e clique em next até finish. Veja o que o Eclipse já encontrou o Tomcat.

Crie um arquivo index.jsp em WebContent, como a seguir:

Na parte inferior clique em Server, e em seguida dê dois cliques no servidor:

A tela que abre escolha, conforme abaixo:

Salve e execute o projeto JEE:

E deve obter a seguinte tela:

Clique em next até finish.

Assim acabamos de montar nosso ambiente JEE com TomCat 7 no Ubuntu/Linux, desta vez com OpenJDK.

Espero que tenham gostado do post, apesar de grande, é bem fácil e rapido instalar/configurar o ambiente.

abracos see you next post!!

Sincronizando dados WorkBench para MySQL

olá Pessoal,

Neste post vou mostrar como sincronizar dados do WorkBench com o MySQL, assim as alterações realizadas no Workbench, causará impacto direto no banco, lembrando que esse recurso não fica de forma default por medida de segurança. O post será bem pequeno e objetivo. Vou considerar que você já tem o workbench instalado e uma base de dados no MySQL. Apesar de para uns parecer um posts para usuários básicos,  mas fazer modelagem de dados é algo que acontece com uma certa frequencia à depender do projeto. E saber usar uma ferramenta de modelagem  não é nada mal.

lets go…

Post Relacionado

Starting…

Mas, você deve está se perguntando e se eu alterar as tabelas no WorkBench estas alterações serão refletidas automaticamente no Banco de Dados? A resposta é não. Para que isso seja possível, precisamos informar ao WorkBench que ele deve passar as alterações para o BD.

O processo é bem semelhante ao que fizemos para importar do MySQL para o WorkBench. Basta ir em DataBase ==> Synchronize Model.

Siga as instruções da ferramenta, porém fique atento apenas para a penúltima tela, pois deve ser informado quais tabelas serão atualizadas e certifique-se de ignore aquelas que não sofreram alterações. Do contrário tudo que estiver no BD, será substituído e perdido. Veja, como ficou a nossa:

Espero que tenham gostado do post, vou ficando por aqui, e até próxima.

See ya! Abraços,