matheus306:
Opa galera… estou estudando estes dias e estou querendo fazer a seguinte coisa. so para teste mesmo.
eu gostaria de criar uma classe que fosse capaz de montar query’s de maneira bem genérica. Por exemplo, eu gostaria de salvar o obj pessoa. Então eu chamaria esta classe que pegaria os atributos através do Pessoa.class e montaria uma query e mandava pro banco. Minha dúvida é. Como passar os parametros. EX:
queroMontarMinhaQuery(AkiTemQueIrAClasse)
mas como eu vou passar a classe? porque quando eu passar pessoa eu vou ter que pegar Pessoa.class, quando eu passar Loja vou ter que pegar Loja.class. O mesmo método pode receber classe diferentes.
Vc quer passar a classe, então passe a classe.
queroMontarMinhaQuery(Pessoa.class);
Para montar (build) a query vc precisa de um objeto do padrão Builder. Isso irá ajudá-lo muito. De quebra use encadeamento de métodos para facilitar. ficaria mais ou menos assim :
Query<Pessoa> q = QueryBuilder.search(Pessoa.class)
.and("nome").eq("josé")
.and("idade").between(13, 21)
.orderby("nome").asc();
Depois vc manda algum objeto executar a query. Esse objeto, em algum lugar irá usar um objeto no padrão Interpreter ( ou seja um interpretador) que irá converter o objeto query em um string SQL ou em qq outra coisa que vc quiser ( um criteria do hibernate, por exemplo).
List<Pessoa> pessoas = repositorio.find(q);
Padrões relacionados : Builder, Interpreter, QueryObject