Gerar Json sem precisar de uma nova consulta ao banco

4 respostas
R

Bom dia galera,

Tenho um codigo que faz uma busca no banco de dados e me retorna os dados em um list(), a partir disso eu pego os dados e exibo no front, tenho tmb um codigo que gera um Json a partir desta mesma consulta, só que para isso ele executa a consulta novamente, o q eu queria é q ele executasse apenas uma vez a consulta o metodo gerador de json utilizasse a lista gerada sem necessitar de uma nova consulta ao banco. Ok eu sei que isso que eu falei é facil de fazer , mas o q esta complicando minha vida são as URLs, pois a busca é montada em uma pagina HTML exibindo os dados e tal porem o resultado do json é gerado ema um outra URL, se eu carregasse o json na mesma url da busca ele iria sobrepor o HTML, minha duvida é se tem como eu carregar os dois em uma mesma URL ou se tem como eu enviar um List() para a pagina do json ao invés de pedir para ee executar a consulta a consulta novamente e pegar um list() igual ao q eu ja tinha.

4 Respostas

D

Qual o motivo de você não querer executar a consulta novamente?
Qualquer SGBD que se preze tem cache. Se sua preocupação é que a consulta vai ser feita “de novo”, pode ficar tranquilo, pois ela já foi feita e só será refeita (a parte nova) se houver alguma modificação nos objetos do banco.

[]'s

R

Na vardade nem é tanto essa minha preocupação pq a performance ainda esta boa, se eu pudesse evitar o retrabalho da consulta tudo bem, mas não é esse o maior motivo, a questao é que eu estou montando a consulta a partir dos parametros da URL, sendo assim eu tenho q enviar estes parametros tanto para o metodo busca quanto para o metodo json ja que o mesmo chama o metodo busca para gerar os dados, o q eu queria evitar é isso pq a cada novo parametro de url q eu crio eu preciso modificar os dois metodos sendo q se eu apenas enviasse o resultado do metodo busca para o metodo json eu nao precisaria rodar novamente o metodo busca e passar os parametros todos novamente e ter q alterar varias partes de codigo duas vezes a cada parametro novo q minha mente pensar em criar e etc

J

Cara,

Agora eu fiquei curioso. Como é que é?
Você recebe os parâmetros da consulta e dispara dois métodos, um de busca e outro pra gerar Json?!

Eu ainda não entendi o procedimento… tem código pra mostar por favor?!
Quem sabe a gente não te ajuda de outra forma…

R

Opa, então é isso mesmo, eu executo dois metodos na mesma pagina, um pra fazer a busca no BD e transformar o resultado em list para o front receber isso e montar o html, e o outro metodo gera uma pagina com os dados em json, porem este metodo chama o metodo busca novamente, e nisso eu executo a busca 2x, segue abaixo o codigo:

Metodo de consulta ao BD (eu exemplifiquei o metodo, eu sei q neste exemplo abaixo seria muito mais facil fazer a consulta utilizando os recursos do hibernate do q usando query nativa, mas no meu metodo real a query é bem mais complexa q essa, o q não vem ao caso encher esta pagina de codigo, o q importa é eu exemplificar o q meu metodo faz)

public List<Escola> busca(String q, String f1) {

		String sql = "SELECT * FROM pessoa ";
		
		return HibernateUtil.currentSession()
				.createSQLQuery(sql)
				.addEntity(Pessoa.class)
				.setMaxResults(50)
				.list();
	}

Metodo para gerar o json de acordo com o metodo de consulta acima:

public void buscaJson(Result result, String q, String f1) throws NullPointerException{
	result.use(Results.json())
	.withoutRoot()
	.from(busca(q, f1))
	.serialize();
}

Metodos do contoler

@Path({"/busca/{q}", "/busca/{f1}/{q}"})
	public void busca(String q, String f1) {
		result.include("pagina", "search");
		result.include("pessoas",pessoaRepository.busca(q, f1));
	}
	
	@Get({"/busca.json/{q}","/busca.json/{f1}/{q}"})
	public void buscaJson(String q, String f1) {
		pessoaRepository.buscaJson(result, q, f1);
	}

perceberam como tenho q repetir os parametros para as duas buscas, queria evitar este trabalho, queria apenas executar o metodo busca e com o resultado dele gerar o json semp recisar chamar o metodo novamente e passar os mesmos parametro e etc

Criado 9 de janeiro de 2013
Ultima resposta 10 de jan. de 2013
Respostas 4
Participantes 3