Estou fazendo um trabalho para a facu, e nao estou gostando muito do resultado…rs é uma pagina com alguns acesso a banco de dados.
A pagina deve ser feita usando apenas jsf e servelt que foi a materia dada ate agora… para deixar o negocio um pouco melhor estou tentando aplicar alguns padroes.
Usando o padrao DAO eu vou ter um DAO para cada tabela do meu banco… e esses DAO fazem praticamente a mesma coisa… alguém tem alguma ideia de como podeira criar um dao generico sem usar hibernate ?
Eu pesquiei mas achei usando o hibernate… (que nao conheço entao nao sei como ele funciona para mandar fazer ao contrario) e a melhor solucao seria aprender a usar o hibernate … mas no meu trabalho da facu eu nao posso usar ele.
Obrigado,
Marcelo Gomes
sergiotaborda
Eles fazem quase a mesma coisa. Esse quase implica que não são iguais. Para ter um DAO generico vc precisa de metadados. Ou seja, retire o que é difernete e mantenha o que é comum. Criar um dicionário não é dificil apenas trabalhoso
classEntityModel{Class<?>type;StringtableName;List<FieldModel>fields;}classFielcModel{Class<?>type;Stringname;Stringcolumn;booleanisMandatory;booleanisKey;}interfaceDAO<T,K>{publicKsave(Tobj);publicvoiddelete(Tobj);publicList<T>executeCriteria(Criteriac);}classJDBCDAO<T,K>implementsDAO<T,K>{DataSourceds;EntityModelem;publicKsave(Tobj){Kkey=em.getKey(obj);if(key==null){// insert// monta frase sql usando os metadados e os valores em obj}else{// update// monta frase sql usando os metadados e os valores em obj}}}classDAORegistry{staticMap<String,EntityModel>models;staticDataSourceds;publicstatic<T>DAO<T>getDAO(Class<T>type){EntityModelem=model.get(type.getName());if(em==null){thrownewIllegalStateException("DAO not found for "+type)}returnnewJDBCDAO(ds,em);}}
uso
// no inicio do programaEntityModelclienteModel=newEntityModel(Cliente.class)clienteModel.addField(String.class,"name","nome",true,false);clienteModel.addField(Integer.class,"id","id",true,true);DAORegistry.addModel(clienteModel);// quando precisar do DAODAORegistry.getDao(Cliente.class).save(cliente);
obrigado Renomoto eu ja tinha visto esta pagina mas la ele usa hibernate… mas nao posso usar o hibernate… e como nao conheco hibernate tb nao entendi…rs
Sergio acho que era isso que estava querendo vou tentar entender (tem bastante coisa nova pra mim no seu exemplo =] )
Obrigado,
Marcelo Gomes
E
ereinion17
Voce pode implementar uma interface e implementar os metodos numa classe pai, e seria necessario apenas programar as peculiaridades de cada dao