No caso do Hibernate.
Você cria um sistema de gerenciador de entidades, isso se estiver trabalhar com JPA por baixo, ou cria um sistema de gerenciador de sessão, se não estiver trabalhando com JPA por baixo.
SessionFactory ou EntityManager
Daí fazemos o seguinte, com o JDBC padrão criamos então a nossa classe de conexão que obtemos a instância de um DriveManager
depois disso tratamos os eventos em DAOs (Data Access Object), geralmente usamos da seguinte forma, para cada tabela (classe ou entidade como queira chamar) declaramos um DAO. Temos portanto na nossa aplicação:
Voltando ao hibernate.
Crio um JPAUtil, ou simplesmente um DAO genérico, do qual posso abstratir as funcionalidades de Cliente, Dependente, Usuario, Produto, Fornecedor e Log.
Bom. Fazemos nossas entidades herdarem uma classe model em comum, dessa forma tornamos generico o processo de CRUD e de outras atividades.
:arrow: E se mudar o banco??
Mudando o banco, em tese apenas precisamos mudar a nossa configuração inicial, que pode estar declarada em um hibernate.cfg.xml, em um persistence.xml, em um arquivo properties, podemos “dá um overring” nas configurações em runtime, em fim, temos essa liberdade de tratar e alterar a configuração.
:arrow: E se eu quiser usar SQL nas consultas?
Pode-se fazer, apesar que perde inclusive um dos conceitos fundamentais do hibernate ou iBATIS que é a crossover plataform. Independência de banco de dados.
:arrow: Posso fazer qualquer tipo de consulta?
Pode sim, basta saber criar os relacionamentos, usar a Criteria, find, Criterion, NamedQueries, em fim, usar o que o hibernate disponibiliza para você.
:arrow: E se mudar um campo da tabela?
Como você não tem toneladas de DAOs o seu impacto será MUITO menor que se você estivesse usando o padrão normal JDBC.
Em fim, há frameworks que vêm para ajudar e outros que concordo que só são para…