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?
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.
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
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…
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.
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.
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.
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
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)…