Blog

Utilização da criteria para consultas no banco de dados

Ola, neste post irei demonstrar uma ferramenta de consultas ao banco de dados pouco vista na documentação oficial do grails o CRITERIA.

 

Mas o que é criteria?

O criteria é uma forma OO de fazer consultas, substituindo o HQL do Hibernate. A diferença é que no grails temos uma versão mais “groovy”.

Mais para que utilizar as Criterias já que temos os finders dinâmicos para consultas OO?

Os finders do GORM são feito para consultas simples como, por exemplo:

Pessoa?.findNome(‘marcio’);

E nos finders teremos no maximo três condições para a consulta (minha opinião), então no caso de mais filtros a serem feitos utilizaríamos a criteria.

 

Iniciando com Criteria!

Em todas as classe do tipo Domain no Grails se encontra a função createCriteria,que por sua vez possui uma função que será usada em 99% dos casos: a função list.

Exemplo:

def criteria = Pessoa.createCriteria().list(){}

Neste exemplo acima teremos um retorno igual a Pessoa.list() pois não foi especificado nenhum parâmetro no criteria. Caso fosse de nosso interesse retornar todos as Pessoas cujo o nome comece com “Marcio%”, teríamos que adicionar os seguintes parâmetros.

def criteria =Pessoa.createCriteria().list(){

like("nome", "Marcio%");

}

 

Com isso podemos fazer o filtro que quisermos segue abaixo uma lista de opções de filtros que podemos utilizar na criteria:

  • between("balance", 500, 1000)
    •   Compara um valor entre o parametro "balance".]
  •  eq("branch", "London") 
    • Compara se existe um registro "London" na coluna "branch".
  •  eqProperty("lastTransaction","firstTransaction") 
    • Compara uma coluna com outra.
  •  gt("balance",1000)
    • Quando uma propriedade é maior que um valor específico.
  •  gtProperty("balance","overdraft")
    • Quando uma propriedade for maior que outra.
  •  ge("balance",1000)
    • Maior ou igual.
  •  geProperty("balance","overdraft")
    • Maior ou igual para propriedades.
  •  idEq(1)
    • Se existe um id com um valor passado.
  • ilike("holderFirstName","Steph%")
    • O mesmo do like no SQL.
  •  'in'("holderAge",[18..65])
    • O mesmo que o in "entre" no SQL.
  •  isEmpty("transactions")
    • O mesmo que o "is null" no sql porem para hasMany.
  •  isNotEmpty("transactions")
    • O mesmo que o "is not null" no sql porem para hasMany.
  •  isNull("holderGender")
    • O mesmo que o "is null" no SQL.
  •  isNotNull("holderGender")
    • O mesmo que o "is not null" no SQL.
  •  lt("balance",1000)
    • Se a propriedade for menor que 1000.
  •  ltProperty("balance","overdraft")
    • Se a propriedade for menor que a outra.
  •  le("balance",1000)
    • Se a propriedade for menor ou igual que 1000.
  •  leProperty("balance","overdraft")
    • Se a propriedade for menor ou igual que a outra.
  •  like("holderFirstName","Steph%")
    • Mesmo do SQL.
  •  ne("branch", "London")
    • Quando for diferente.
  •  neProperty("lastTransaction","firstTransaction")
    • Quando uma propriedade for diferente de outra.
  •  order("holderLastName", "desc")
    • Para ordenar.
  •  sizeEq("transactions", 10)
    • Para definir um size.

 

Boa tarde galera ate o próximo post,

Márcio José da Silva.