Dúvida - bean

5 respostas
ericsobral

Estou aprendendo a usar jsp com struts e algumas tag librarys.

Tenho a seguinte dúvida (desculpem por essa dúvida besta aqui, mas nas pesquisas não achei nada que me respondesse satisfatoriamente):

Quando eu faço uma consulta ao banco (postgre), eu tenho uma DAO (com o crud) e uma Bean (com todos os atributos) daquela “tabela” do banco.

Para quando eu fizer uma consulta, eu retornar uma lista de objetos bean.

Mas e quando a consulta envolve várias tabelas?? Eu vou ter que fazer uma classe bean para cada consulta do meu sistema??

Lembrando que eu estou usando JDBC. Seria indicado usar algum framework de persistência??

Grato pela ajuda

5 Respostas

B

Opa,

Seguinte, um bean é uma classe que representa uma coisa, um objeto, não são orientados a consulta, e sim a objetos, saca a diferença?!

Vc pode ter um bean que represente uma entidade, por exemplo “Cliente”, mas as informações deste “Cliente” pode ou não estar em mais de uma tabela no banco de dados, mas quando vc recuperar estas informações elas representaram um Cliente, sacou?

ericsobral

Eu já consegui entender a diferença. Mas depois que dou o select, eu monto a lista...

Exemplo:

public List<Analista> listar(String nome) {

		if (nome != null){

	        List<Analista> lista = new ArrayList<Analista>();
	        
			PreparedStatement stmt;
			
			try {
				
				stmt = this.connection.prepareStatement("select * from analista_tds where nme_analista ilike ? order by nme_analista");
				stmt.setString(1, "%" + nome + "%");
		        ResultSet rs = stmt.executeQuery();
		        
		        while (rs.next()) {
		        	
		            Analista analista = new Analista();
		            analista.setCodAnalista(rs.getInt("cod_analista"));
		            analista.setNmeAnalista(rs.getString("nme_analista"));
		            analista.setDtaAdmissao(Conversao.DataBraString(rs.getString("dta_admissao")));
		            analista.setExperiencia(rs.getString("experiencia") + " anos");
		            analista.setQualificacoes(rs.getString("qualificacoes"));
		            lista.add(analista);
		            
		        }
		        
		        rs.close();
		        stmt.close();
		        
		        return lista;
		        
			} catch (SQLException e) {
			
				e.printStackTrace();
				
			}		
			
		}

		return null;
		
	}

Mas ai eu teria uma bean para cada consulta (select)?

B

Não não cara, nada de um bean para cada consulta… vc pode ter um bean para cada tabela… o que as vezes, quando o sistema esta sendo feito junto com o banco ocorre, mas um bean por consulta… não, vc tem que ver esta questão da entidade, saca?

ericsobral

E como eu faria para retornar a lista (resultado da consulta)???

balthazar

Cara seguinte, um bean seria uma especie de intermediario entre a sua view e o seu repositorio.
Bom, digamos que voce possuia um formulario que tinha como finalidade salvar dados de uma pessoa e exibi-los em uma tabela de visualizacao; perceba que os dados sao para uma pessoa logo voce poderia ter um pessoabean, digamos, com os metodos para persistir e retornar os dados no repositorio. O que acontece e que, quando o usuario na tela preciona o butao salvar, no bean e realizado uma chamado para o metodo pertinente ao salvar e esse metodo se encarregara de salvar conforme o solicitado pelo usuario (como? depende da regra codificada), o mesmo vale para o exibir. Seguindo essa perspectiva, poderia-mos ter um bean para cada tela que tivesse no sistema, isso ajuda na organizacao e, posteriormente, na manutencao (uma tela de produto e seu produtobean, uma tela de documentos e seu documentobean, etc.). Mas toda regra possui excecoes e isso fica a seu criterio pos cada programador ver e implementa de formas diferentes, logos podemos ter beans que conversam ou nao.

Quanto a listagem, apos o processamento vc retorna a lista montada e pronto, o resto quem deve se encarregar e a view tipo

<h:dataTable value="#{pessoaBean.lista}" var="pessoa" >
  <rich:column headerClass="columnWithHeigh50" >
    <f:facet name="header">
        <h:outputText value="Nome" />
    </f:facet>
    <h:outputText value="#{pessoa.nome}" />
  </rich:column>
</h:dataTable>

essa tela muda caso seja uma aplicacao desktop mas a logica no bean nao muda.

att,

Criado 4 de agosto de 2008
Ultima resposta 4 de ago. de 2008
Respostas 5
Participantes 3