domingo, 15 de fevereiro de 2009

db4o (parte 3) – QBE: Query-By-Example

O db4o oferece quatro formas diferentes de se realizar queries: Query By Example (QBE), Native Queries (NQ), SODA API e LINQ. Neste POST veremos como funciona o QBE.

Query-By-Example, ou simplesmente QBE é a forma mais simples e indicada para usuários que estão iniciando com o db4o. Este é um conceito de construção de queries antigo, que foi criado em paralelo com a linguagem SQL nos anos 70.

A idéia é criar um protótipo que servirá de exemplo para os registros que devem ser retornados pela pesquisa. Este tipo de query é muito comum na orientação a objetos. Se quiser conhecer mais sobre o conceito, dê uma olhada neste artigo publicado no Wikipédia: http://en.wikipedia.org/wiki/Query_by_Example

No db4o quando você usa o QBE, deve fornecer como parâmetro um objeto de template. O db4o irá retornar todos os objetos que tiverem as propriedades iguais aos do objeto template, ignorando apenas as propriedades que contiverem valores defaults.

Fazendo uma consulta na base de dados criada no POST anterior, veja o exemplo abaixo:


Neste exemplo estamos executando uma Query By Example, passando “como exemplo” um objeto da classe Country que possuí a propriedade ID = “BR”. O valor null para strings e o zero para inteiros, são considerados valores defaults, e portanto essas propriedades não entram como condição para esta pesquisa. Sendo assim, o resultado dessa query irá retornar apenas o país Brasil, veja na imagem abaixo:


Obviamente esse tipo de Query é bastante limitado, já que restringe as nossas possibilidades de pesquisa a retornar apenas objetos que tenham as propriedades iguais às do objeto template. Além disso, você não pode utilizar operadores lógicos como OR, AND ou NOT. Porém, é uma forma muito útil e fácil de pesquisar um determinado objeto, através de propriedades chaves, como um ID.

O QBE também pode ser utilizado como uma forma simples e rápida de retornar todos os objetos de uma determinada classe, veja o exemplo do código abaixo:


O resultado é a lista de todos os países armazenados no database. Veja na figura a seguir:


Como disse no início, essa é uma forma bem simples para realizar consultas no db4o, e indicada quando estamos iniciando. No próximo POST veremos como funcionam as Native Queries (NQ), para principalmente endereçar tipos de pesquisa não suportados pelo QBE.

Grande Abraço e até o próximo!

2 comentários:

  1. Oi td bem?
    Eu fiz exatamente conforme esse teu post para recuperar todos objetos de um tipo de classe no meu projeto, porem sempre retorna vazio o resultado, e no insert eu usei commit, e qd eu olho com o Object Manager no banco os objetos estao la. pq isso acontece?
    estou usando VS2008 e db4o for .net 3.5

    ResponderExcluir
  2. Olá,
    Verifique se o arquivo do database está marcado na sua solution como "Copy allways". Se estiver, o que acontece é que toda vez que você compila o projeto, o database da pasta debug é sobreposto pelo original. Se for este o caso mude a propriedade para "Copy if newer" que deve funcionar. Se não conseguir resolver, me mande seu projeto por email para que eu possa avaliar (rodrigo@sendin.org).
    Abs!

    ResponderExcluir