<p>Consider what you're trying to achieve. Typically, the <a href="http://martinfowler.com/bliki/CQRS.html" rel="noreferrer"><strong>Command Query Response Segregation</strong></a>
model works well for complex domains.</p>

<p>The reason is that you're trying to do one of two things typically:</p>

<ol>
<li>Create/Update/Delete some complex domain entities</li>
<li>Run analytic fetch queries (i.e. summation/aggregation queries)</li>
</ol>

<p><strong>Hibernate</strong> works well for case 1 allowing you to just make a POJO and persist/update it. It also does this quickly, unless your domain is quite large.</p>

<p><strong>myBatis</strong> is great for fetch queries (case 2) where you just want an answer. Hibernate would attempt to load the entire object graph and you'd need to start tuning queries with LazyLoading tricks to keep it working on a large domain. Conversely if you just want some analytic POJO page, the myBatis implementation of the same query would be trivial.</p>

<p>Because of this, myBatis <a href="http://arxiv.org/ftp/arxiv/papers/0710/0710.1404.pdf" rel="noreferrer">is faster than Hibernate</a> at SELECTS.</p>

<p>These two cases are the difference between <strong>Commands</strong> where you want to change the domain data and <strong>Responses</strong> where you just want to fetch some data.</p>

<p>So, consider these two cases and what your application does. If you have a simple domain and just fetch information, use myBatis. If you have a complex domain and persist entities, use Hibernate. If you do both, consider a hybrid approach. That's what we use on our project that has thousands of entities to keep it under control. ;)</p>
Hibernate Vs iBATIS
<p>For our new product re-engineering, we are in the process of selecting the best framework from Java. As the consideration is to go for database agnostic approach for model, we are working on options between Struts + Spring with iBATIS or Hibernate. Please advice which is best as both offer persistence.</p>