Hibernate es un ORM, lo que significa (en su nivel más básico) que asigna instancias de objetos java a filas reales en una tabla de base de datos. Generalmente, para pojo's recuperados a través de Hibernate: cualquier manipulación y modificación de estos pojo's aparecerá en la base de datos. Hibernate generará y ejecutará el SQL relevante en el momento apropiado.
Mybatis (en su nivel más básico) es simplemente una herramienta para unir y ejecutar SQL que se almacena en archivos xml. No asigna instancias de objetos Java a filas en una tabla de base de datos, sino que asigna métodos Java a declaraciones SQL y, por lo tanto, no es un ORM. También puede devolver pojo's, por supuesto, pero no están vinculados a ningún tipo de contexto de persistencia.
Ambas herramientas hacen mucho más de lo descrito anteriormente, pero una es un ORM y la otra no.
Creo que los criterios que le permiten elegir cuál usar dependen fundamentalmente del modelo de base de datos con el que debe trabajar.
Por ejemplo, imagine un esquema extenso grande, que representa algún modelo de seguro. Los desarrolladores deben recuperar datos e interactuar con esos datos de una manera que se adapte al negocio en cuestión.
Los desarrolladores van y vienen, y nunca se esperaría que tuvieran los conocimientos comerciales necesarios para escribir todo
el sql a mano (que Mybatis requeriría). Hibernate se adaptaría a un escenario como ese.
Los analistas de negocios definen el modelo de datos, las entidades, las relaciones y las interacciones, al igual que su experiencia. Luego, los desarrolladores de Java usan Hibernate para "recorrer el modelo". Los desarrolladores de negocios pueden volverse muy productivos rápidamente sin la necesidad de escribir un SQL complicado propenso a errores para que se ejecute en un esquema muy complicado.
En mi experiencia, tanto Hibernate como Mybatis se usan regularmente en el mismo proyecto.
Dónde se utiliza Hibernate
- Funcionalidad CRUD general
- 'Caminando' el modelo relacional del 'objeto de dominio'
- Gestión de sesiones
y dónde se utiliza Mybatis para
- consultas ad hoc
- iniciar (e interactuar con) procedimientos almacenados
- admite consultas muy específicas o complejas
- Admitir consultas de búsqueda complicadas, donde los criterios de búsqueda son dinámicos y la paginación de resultados.