Dao Generico sem usar Hibernate

Olá galera do GUJ,

Bem venho por meio deste topico saber, se tenho como criar uma classe dao generica
sem usar o hibernate. pois vi nos foruns varios exemplos de daos genericos, mas usando o hibernate.

estou criando um sistema para o meu estágio mas não estou usando o hibernate ainda.

achei interessante o dao generico.
Uma outra duvida que tenho, é para cada implementação do meu dao eu preciso ter uma interface.
por exemplo:

tenho uma classe cidade, cliente, produto.
para cada dessas classes, preciso ter uma interface com os metodos daos necessarios (insert, update, delete), ou apenas uma?

Bem espero ter sido claro nas minha duvidas

aguardo a respostas de todos

muito obrigado

Tenho uma classe chamada Produto, com meus atributos, sets e gets…

public class Produto {

	private String ProdutoDescricao;
	private String Custo;	
	
	public String getProdutoDescricao() {
		return ProdutoDescricao;
	}
	public void setProdutoDescricao(String produtoDescricao) {
		ProdutoDescricao = produtoDescricao;
	}
	public String getCusto() {
		return Custo;
	}
	public void setCusto(String custo) {
		Custo = custo;
	}	
}

Tenho uma classe chamada ProdutoDAO, com um método que insere meu Produto no banco

public class ProdutoDAO {
	
private Connection connection;
	
	public ProdutoDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();		
	}
	public void insere(Produto produto) throws SQLException{
		PreparedStatement pstm = this.connection.prepareStatement
		                   ("insert into produto(descricao,custo) values (?,?)");
		pstm.setString(1,produto.getProdutoDescricao());
		pstm.setString(2,produto.getCusto());
		
		
		pstm.executeUpdate();
		
		
		pstm.close();		
	}
}

Está classe faz conexão com o banco

public class ConnectionFactory {
	private static String DRIVER = "com.mysql.jdbc.Driver";
	private static String URL = "jdbc:mysql://localhost/teste";
	private static String USER = "root";
	private static String PASSWD = "root";
	
	public static Connection getConnection() throws SQLException{
		try {
			Class.forName(DRIVER);
			return DriverManager.getConnection(URL,USER,PASSWD);
		} catch (ClassNotFoundException e){
			throw new SQLException(e.getMessage()); 
		}	   
    }	
}

Respondendo a sua duvida, é possivel ter apenas uma classe com os métodos (insert, delete, update) ?
Sim, basta você passar o nome da tabela e os campos por parâmetro.

E ae André, bom dia

Cara da sim viu, você pode ter um DAO genérico se estiver usando JDBC puro sem problemas, só vai ter que trabalhar um pouco pra escrever ele.

Por exemplo, você poderia usa reflection pra que seu GenericDao descubra os campos do seu pojo e monte os métodos padrão, insert, update, delete e select por ex.

De uma lida sobre Java Reflection que vc vai gostar muito do que ela pode fazer = D

Att

Realmente é por que voce usando Hibernate só precisa de uma classe genérica e não varios DAOs que extendem um genérico para ser mais especifico.

bom… vc teria que criar suas próprias anotations… e ter uma classe que use jdbc puro… e leia as classes anotadas via reflection… monte um sql através de concats… e passe como parametro no jdbc…

fica rapidão ^^

Acho que pra uma coisa mais simples, a idéia seria por ex. usa reflection pra ler o atributos do sua classe de entidade, ID, NOME, SOBRENOME etc.

O seu método teria a capacidade de identificar esses atributos, você poderia usar algum padrão na nomenclatura dos campos pra ficar mais facil identificar, assim não seria necessário escrever suas próprias annotations.

Todo esse trabalho com Reflection não compensa. É mais fácil utilizar o Hibernate mesmo.

Nada como o Hibernate…

Com crtz =D

Mas usando reflection tbm poderia, ou se nao … usa IBatis se o negocio é escrever query

Abrs

Olá pessoal

obrigado pela ajuda e pelos conselhos de vc sinceramente eu sei que o hibernate seria uma mão na roda pra mim mas estou sem tempo para aprender e para usa-lo no meu estágio
a primeira entrega esta em cima da hora. mas vou aprender a usa-lo.
Bem pessoal o que eu fiz aqui não sei se é o certo
criei apenas uma interface chamada GenericDao

public interface GenericDao<T> {

    public String setCodigo(String sql);
    public void Inserir(T objeto) throws SQLException;
    public void Alterar(T objeto) throws SQLException;
    public void Excluir(T objeto) throws SQLException;
    public List<T> ListarConsulta(String dao, String filtro) throws SQLException;
    public T SelecionarConsulta(String  dao, int codigo) throws SQLException;

}

Depois implementei essa interface numa classe chamada GenericDaoImpl
e implementei os metodos conforme a necessidade das minhas classes de regra de negocio
a classe ficou enorme, mas funcionou como eu queria.

bem não sei se esta certo

mais é isso ai

desde já agradeço a atenção de todos

valew

Só uma coisa. Siga as convenções. nomes de métodos começam com letra minuscula.

public interface GenericDao<T> {

    public String setCodigo(String sql);
    public void inserir(T objeto) throws SQLException;
    public void alterar(T objeto) throws SQLException;
    public void excluir(T objeto) throws SQLException;
    public List<T> listarConsulta(String dao, String filtro) throws SQLException;
    public T selecionarConsulta(String  dao, int codigo) throws SQLException;
}

Opaaa, ficou bom André, porem não seria exatamente um DAO generico, ja que o DAO generico se caracteriza por não repetir os metodos dentro dos seus DAOs, mais ta no caminho, se eu encontrar aqui alguma coisa sobre DAO Generico com JDBC puro eu te envio.

um abraço
Att

Intaum cara,
eu intendi errado sobre daos genericos uhauhuauhauhau :oops:
pensei que eu deveria criar apenas uma classe dao que implentasse a minha interface
pois dessa forma que pensei eu não iria criar varias classes entendem? :oops: hahahahaha

bem mas é isso
agradeço a compreesão de todos vcs ai
se vcs puder me ajudar com links em portugues onde ensinem sobre dao eu agradeço

ha!! só mais uma coisa

estou precisando de ajuda pra criar o contas a receber do meu sistema
eu não sei como fazer e nem por onde começar
tipo eu preciso fazer um “venda” para o meu cliente. dependendo se for a vista ou a prazo isso deve me gerar um contas a receber.
se a venda for a prazo devo gerar as parcelas do contas a receber. Bem mas como faço pra gerar o contas a receber,
não sei como gerar as parcelas do conta. tipo a venda a prazo eu queria que gerar os meses automaticos
tipo 15/07/2009 15/08/2009 15/09/2009 como faço isso
alguem tem um exemplo ai
:cry: eu to desesperado hauhuahuauha e preciso muito de ajuda
meu email andre_parana1@yahoo.com.br
falow ai galera

Olá, eu criei um DAO genérico, com apenas 4 classes acesso qualquer tabela do banco de dados e atualizo os métodos do objeto referente a tabela usando reflection, roda blz , ta meio desorganizado e com alguns erros de português nos comentários mas roda blz, se alguem se interessar posso eviar as classes por email (meu email é davidvlad@gmail.com)…