doesn't completely avoid jdbc, but ... my suggestion is to use the jbdc support provided by the spring framework. You still need to write your choice, update and insertions, but spring wraps it beautifully, so you usually don't need a result set, closing connections, clearing your code, etc.
See this chapter from the spring documentation for details. You can create a whole dao layer that will display just like the hibernate dao layer, but the internal implementation is different. The RowMapper interface allows you to handle the conversion from result sets to objects very beautifully. In general, this provides a clean separation of problems.
( - iBATIS O/R , , sql Java ).