DAO com List

8 respostas
amoreiraedu

Pessoal tenho a seguinte classe:

arquivo Usuario.java (model)

public class Usuario extends EntidadeJuridica {
	protected TipoUsuario tipoUsuario;
	protected Boolean ativo;
	protected Boolean remoto;
	protected Setor setor;
	protected List<Email> email;
//getters e setter.....
	public List<Email> getEmail() {
		return email;
	}
	public void setEmail(Email email) {
		this.email.add(email);		
	}

Arquivo email.java (model)

public class Email {
	protected Integer idEmail;
	protected String email;

Meu problema está no protected List<Email> email, eu não sei como pegar uma lista de valores e inserir no banco de dados. Por exemplo, no meu método insereUsuario dentro do DAO, não sei como fazer para inserir esta lista, e nem como passar os valores para Lista email.

Na verdade não sei trabalhar com lista em java.
Alguém pode mostrar um caminho?

8 Respostas

G

Você quer encapsular o acesso a sua lista, para não expor sua estrutura... É isso?

Então você vai ter que prover 3 métodos básicos para listas...
- Adicionar
- Remover
- Iterator

Veja um exemplo bem simples:

Componente.java
public class Componente {

	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

}
MeuBean.java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MeuBean {
	
	private List<Componente> minhaLista = new ArrayList<Componente>();
	
	public void addComponente(Componente componente) {
		minhaLista.add(componente);
	}
	
	public void removeComponente(Componente componente) {
		if (minhaLista.contains(componente)) {
			minhaLista.remove(componente);
		}
	}
	
	public Iterator<Componente> getLista() {
		return minhaLista.iterator();
	}

}
App.java
import java.util.Iterator;

public class App2 {
	
	public static void main(String[] args) {
		Componente c = new Componente();
		c.setNome("Gabriel");
		
		MeuBean m = new MeuBean();
		m.addComponente(c);
		
		Iterator<Componente> i = m.getLista();
		
		while (i.hasNext()) {
			Componente comp = i.next();
			System.out.println(comp.getNome());
		}
	}

}
paulopatto

Edu ( amoreiraedu ) boa tarde.

Você está usando JDBC ou HIBERNATE? Creio que no seu banco de dados você tenha duas tabelas uma para Cliente e outras só para e-mails (com id Cliente como chave estrangeira), se for desta forma, com o JDBC você pode usar um loop foreach para fazer isso for(Email mail : getEmail()){ /// Aqui sua lista de comando. }

Bem espero ter ajudado, não foi a melhor solução mas tá ai uma dentre muitas.

amoreiraedu

Bacana isso.
Mas, e se eu quiser inserir uma lista de valores através do seu método main, public class App2?
No exemplo abaixo vc inseriu apenas um usuário. Como faço pra inserir esta lista de valores de uma só vez.

Acontece que tenho um grid do tipo listbox no meu jsp, onde durante o cadastro de usuário é possível adicionar vários email(s) para um único usuário. A situação é essa, quando clicar no botão inserir irá inserir também a lista de valores do listbox, junto com os demais dados do usuário.

Lavieri
amoreiraedu:
Na verdade não sei trabalhar com lista em java. Alguém pode mostrar um caminho?
Usuario myUser = 
                 getRandomUser(); // método hipotetico apenas para falar que existe um usuario

for (Email email : myUser.getEmail()) { //dentro do for ele vai percorrer todos os email
      dao.insert(email); //método hipotetico,
      System.out.println(email);
}
amoreiraedu

Desculpa a minha ignorância. Mas sou novo em java.
Criei os dois arquivos model (email.java,usuario.java) e o app.java este último retornou corretamente o setNome, no caso Gabriel.
Até aí tranquilo.

Agora me diz um coisa, aonde eu coloco o PreparetStatment para inserir esse setNome numa tabela?
Outra coisa, não entendi a chamada do dao.insert(email) dentro do For;

Usuario myUser =  getRandomUser(); // método hipotetico apenas para falar que existe um usuario  
 
for (Email email : myUser.getEmail()) { //dentro do for ele vai percorrer todos os email  
      dao.insert(email); //método hipotetico,  
      System.out.println(email);  
}

Como eu testo isso no meu método main?

Valeu mesmo a força hein!!! e desculpa a ignorância minha!!

Lavieri
amoreiraedu:
Desculpa a minha ignorância. Mas sou novo em java. Criei os dois arquivos model (email.java,usuario.java) e o app.java este último retornou corretamente o setNome, no caso Gabriel. Até aí tranquilo. Agora me diz um coisa, aonde eu coloco o PreparetStatment para inserir esse setNome numa tabela? Outra coisa, não entendi a chamada do dao.insert(email) dentro do For;
Usuario myUser =  getRandomUser(); // método hipotetico apenas para falar que existe um usuario  
 
for (Email email : myUser.getEmail()) { //dentro do for ele vai percorrer todos os email  
      dao.insert(email); //método hipotetico,  
      System.out.println(email);  
}

é que java vc abstrai as coisas... vc me perguntou como usar um list e ali tem um exemplo.... ali nakele caso.... ele roda dentro de um FOR todos os e-mail.... e os manda para dentro de um objeto "Dao", como falei hipotetico, que sabe tratar de um objeto e-mail.... através de um método insert(Email email) .... naquele trecho eu simplismente abstraio o que "dao" vai fazer.... eu mandei ele inserir um e-mail, e ele que o faça...

dentro de dao, isso pode ocorrer de diversas maneiras.... em java existem N formas de salvar akilo no banco....

o método insert, poderia usar email.getIdEmail() .... email.getEmail() ... para saber o nome e o ID ... e assim criar um sql e depois mandar pra outro objeto, que interprete a sql, e salve num banco....

em java é assim, cada um fazendo a sua parte... para que todos sejam felizes...

ali mostrei como usar o java.util.List ... como salvar um dado em um banco, pode te levar a varias respostas, eu uso Hibernate, pq acho melhor, mais existem outras formas

paulopatto

Du, boa tarde.

Bem no caso o preparedStatement deve ficar dentro da sua Classe DAO ou seja, o seu método no dao deve ser algo assim.

public void insert(Email email){
PreparedStatement stmt = getConnection().prepareStatement("insert into tb_mail(email) value(?)");
stmt.setString(1, email);
//Execute
}
amoreiraedu

Eu só tenho a agradecer ao auxílio de vcs, como disse eu ainda estou engatinhando em java…
E o GUJ tem ajudado muito nessa fase.

Criado 15 de janeiro de 2009
Ultima resposta 15 de jan. de 2009
Respostas 8
Participantes 4