Вы можете добавить интерфейсы для своих классов, использовать Hibernate для уровня сохраняемости, заменив DaoSqlImplementation на DaoHibernateImplementation по одному на каждый время. Пока вы соединяете свое приложение с интерфейсами, у вас не будет никаких проблем.
Также я рекомендую вам использовать Spring, таким образом вы можете переключать между реализациями декларативно, просто изменяя XML. Одним из принципов, которым следует Spring, является IoC (Inversion of Control) . В данном случае это означает, что ваше приложение управляет фреймворком, а не фреймворком, а это именно то, что вы просили.
Важным моментом является то, что вы должны обосновать каждую фреймворк, который вы решите добавить в приложение, а не просто добавить его, потому что это очень круто .