sexta-feira, 14 de março de 2014

Persistência de objetos usando JPA - Introdução

Uma das características mais importantes de uma aplicação WEB está no fato de podermos salvar as informações em algum lugar para que as informações sejam recuperadas futuramente. Esse artigo, por exemplo, está salvo em algum banco de dados e quando você acessa ele pelo seu navegador, uma aplicação WEB irá recuperar as informações de algum banco de dados e criar uma página para você. Hoje vamos falar do acesso tradicional à banco de dados usando a linguagem de programação Java e a especificação do Java Persistence API (JPA). Será uma abordagem prática com relação ao JPA, mas não abordaremos a instalação do Maven, que é um requisito para seguir esse artigo.

Mas como acessamos informações de um banco de dados em Java?

A API básica do Java vem com meios de acesso a banco de dados, a JDBC. Nela, você cria conexões com o banco, envia comandos e lê o resultado manualmente e a parte de acesso ao banco de dados (como o protocolo usado) é abstraída através de um driver JDBC. Veja um tutorial sobre esse assunto aqui e para mais informações veja o tutorial oficial na página da Oracle.
O JDBC é a ponte entre uma aplicação Java e um banco de dados

Claro que essa abordagem não é nada prática, veja os problemas imediatos que temos com ela:

  • Mal gerenciamento das conexões de banco de dados por parte do programador. Conexões devem ser fechadas manualmente, quando não fechadas, temos problemas com relação a mal uso de recursos;
  • Muita linguagem de banco de dados no código Java, pois temos que enviar comandos manualmente para o banco e ler o resultado;
  • Código repetido nas interações com o banco;
  • Segurança, pois comandos manuais podem dar brecha para SQL Injection.
Esses são só alguns dos problemas conhecidos. Agora vamos falar de coisa boa, vamos falar de tecpix, vamos falar como o JPA nos ajuda com muitos desses problemas.

Objetos não são tabelas de banco de dados, e agora?

Se só tivessemos que conectar ao banco de dados, tudo estaria OK. Mas Java é uma linguagem orientada a objetos. Representamos as coisas da vida real com classes Java. Se nossa aplicação tem que gerenciar produtos de um estoque, com certeza teremos uma classe que representa o Produto e iremos usar as APIs Java para manipular o mesmo. E quando usamos um banco de dados não poderia ser diferente. Eu não quero selecionar colunas do BD, quero selecionar objetos que estejam em uma lista Java. 
Com a abordagem anterior teríamos que codificar a extração dos dados do banco e em seguida corresponder as colunas do banco em instâncias de um objeto Java manualmente...
Bem, atualmente isso não é um problema. com JPA, pois ela suporta relacionamento entre objetos e tabelas(ORM) usando anotações Java
Com JPA, o desenvolvedor para de se importar com banco de dados enquanto codificando e tem um foco maior no problema que ele quer resolver com a ferramenta Java. Outras coisas como transações e gerenciamento de conexões com o banco de dados, podem ter seu gerenciamento delegados ao servidor de aplicação. Lembrando que JPA está no topo do JBDC, mas, conforme já mencionado, seu uso é muito facilitado por certos aspectos serem delegados ao servidor de aplicação, como gerenciamento de conexões através de um "pool" e instalação do driver do banco de dados proprietário no servidor, não na aplicação.

No próximo artigo iremos abordar uma introdução prática à JPA. Não percam!

Um comentário: