artigo sql magazine 47 - Pesquisando objetos com SQL utilizando o LINQ e o JoSQL
Neste artigo apresentaremos duas abordagens, uma para a plataforma Java e outra para .Net, que permitem ao desenvolvedor utilizar uma sintaxe semelhante à instrução select para consultar objetos armazenados nas estruturas de dados de uma aplicação.
Pesquisando objetos com SQL utilizando o LINQ e o JoSQL
A linguagem SQL, e em particular a instrução select, é utilizada largamente para manipular dados armazenados em tabelas de banco de dados relacionais. Contudo, muitas vezes desejamos aproveitar o nosso conhecimento da linguagem SQL para manipular objetos armazenados em estruturas de dados da aplicação, como arrays, collections e outras estruturas de dados. Neste artigo serão apresentadas duas abordagens recentes, uma para a plataforma Java e outra para a plataforma .Net, que permitem ao desenvolvedor utilizar uma sintaxe semelhante à instrução select para consultar os objetos armazenados nas estruturas de dados de uma aplicação.
Conforme os desenvolvedores foram se familiarizando com a orientação a objetos, cada vez mais os dados manipulados pelas aplicações são armazenados em objetos enquanto a aplicação está sendo executada. O armazenamento de dados em objetos da aplicação é utilizado enquanto o usuário está trabalhando com estes dados e, quando o usuário não mais trabalha com os dados, geralmente algum mecanismo de persistência é implementado. Este mecanismo é responsável por ler os dados que estão nos objetos e gravá-los em uma fonte de dados própria, como um banco de dados relacional.
Por exemplo: em uma aplicação os dados relacionados ao Cliente (código, nome, endereço, etc.) são armazenados em uma tabela no banco de dados, no formato de linhas de colunas. Quando a aplicação está sendo executada, estes dados são carregados do banco de dados para a aplicação, onde ficam armazenados no objeto oCliente, que é uma instância da classe cCliente. Os dados do cliente são efetivamente acessados por meio das propriedades públicas do objeto, que geralmente contêm uma correlação de um para um com as colunas da tabela.
Com o objetivo de facilitar a manipulação dos objetos que contêm dados, os desenvolvedores utilizam estruturas de dados como arrays, collections, lists e outras. Estas estruturas fornecem uma maneira de agrupar e acessar cada objeto individual armazenado, além de métodos para pesquisa, ordenação, exclusão e outras operações. Contudo, estas operações são acessadas por meio de métodos, distanciando o desenvolvedor da linguagem SQL, que possui uma sintaxe clara, simples e eficiente.
Para aproveitar o conhecimento dos desenvolvedores com a linguagem SQL, e em particular com a instrução select, as plataformas Java e .NET apresentam maneiras de se utilizar esta instrução nas estruturas de dados que armazenam objetos. Desta maneira, o desenvolvedor não depende de métodos específicos para acessar um conjunto de objetos armazenados em uma collection, por exemplo. Além disso, o desenvolvedor também pode efetuar manipulações complexas com os dados armazenadas nos objetos, como agregações e ordenações.
Alternativa Java: JoSQL (SQL for Java Objects)
O projeto JoSQL (Java Objects for SQL) é uma abordagem desenvolvida em Java com o objetivo de permitir o uso da instrução SELECT em objetos contidos em estruturas de dados Java. Este projeto não faz parte do JDK (Java Development Kit), ou seja, é um projeto independente, não é fornecido junto com o JDK e deve ser configurado separadamente.
O JoSQL requer a versão Java 5 para ser executado e é composto de apenas dois arquivos .jar. Estes arquivos podem ser obtidos a partir da página do projeto, que está na seção de referências ao final do artigo. Uma vez que estes arquivos tenham sido copiados para a máquina do desenvolvedor, basta colocar a localização (path) destes dois arquivos na variável de ambiente CLASSPATH. Feito isso, o JoSQL já está pronto para ser utilizado.
Para entender melhor como trabalhar com o JoSQL, considerem o código fonte de exemplo apresentado na Listagem 1, onde uma lista de nomes é filtrada por meio de uma instrução SELECT.