DAO Generico

O Design Pattern DAO é um padrão para se encapsular o acesso a banco de um determinado Objeto. Existem muitas criticas sobre esse padrão, dentre elas a que você prolifera muitas classes do estereótipo DAO pelo seu projeto e ma verdade elas só tem um conjuntos de métodos find*. Eu concordo com isso, achei um artigo no Developer Works da IBM, que na minha modesta opinião é uma ótima solução. Você cria uma DAO Genérico e depois só precisa criar interfaces e named querys no Hibernate. A solução envolve Hibernate e Spring + AOP. É Muito bem bolada. Recomendo a leitura do artigo, no final do artigo tem um link para os fontes.

Vou resumir o que a solução faz: Existe uma interface GenericDao que define o comportamento de um DAO, temos uma implementação padrão para essa interface que é a classe GenericDaoHibernateImpl essa classe implementa mais três interfaces: FinderExecuter que é o que o interceptor do Spring ira interceptar. E a outra é FinderArgumentTypeFactory Que define uma factory para criação de custon types para o hibernate. E Por fim FinderNamingStrategy que a interface que define como sua implementadora deverá buscar as named querys no .hbm do hibernate.



Nos criamos uma interface que herda de GenericDao e definimos um metodo por exemplo: findByName no Spring é configurado o interceptor para essa classes e que sua implementadora será via proxy a classes GenericDAOHibernateImpl, mas lá na tem a implementação desse metodo? Não tem problema por que o interceptor ira desvisar essa execução para o metodo executeFinder e descobrir o nome e a named query do hibernate, passar os parametros, fazer o bind, e por fim executar essa consulta.

Acredito que essa seja uma solução muito boa para quem usa Spring + Hibernate.Após esse start up o tempo de desenvolvimento de um DAO se resume a:

  • Criar uma interface.

  • Fazer a query e colocar no .hbm


  • É isso ae pp soal.

    Popular posts from this blog

    Telemetry and Microservices part2

    Installing and Running ntop 2 on Amazon Linux OS

    Fun with Apache Kafka