They are different and each can be useful, depending on your architecture and/or process.
iBatis is a lightweight mapper, you have full control over all SQL executed (you have to write it yourself) which is very helpful in situations with lots of stored procedures and business logic already existant in the database system. iBatis maps result sets to object graphs and offers some abstraction of the underlying/externalized SQL.
Hibernate is a "full" object/relational mapping tool that is most efficient if used with business logic/domain models in the
Java application tier and a normal entity-driven (and hopefully sensible) data model in a SQL database. Hibernate then automates any persistence operations (loading, saving, querying for objects, etc.) for you and offers many interesting optimizations (caching, lazy loading, eager fetching, batch fetching) which are difficult to achieve in a hand-written persistence layer. I'd say it is a bit harder to use Hibernate with very old/broken legacy database schemas but that changes now with Hibernate3, which also offers you to completely hand-craft the SQL that is executed while still giving you many features that make your work easier.