Ya no necesitas buscar más por otras páginas porque llegaste al lugar necesario, tenemos la solución que buscas sin complicarte.
Solución:
iBATIS e Hibernate son bestias bastante diferentes.
La forma en que tiendo a verlo es la siguiente: Hibernate funciona mejor si tu vista es más centrado en objetos. Sin embargo, si ves es más centrado en la base de datos entonces iBATIS es una opción mucho más sólida.
Si tiene el control total de su esquema y no tiene un requisito de rendimiento extremadamente alto, Hibernate puede funcionar bastante bien. El modelo de objetos crea un código bastante conveniente, pero en un enorme costo de complejidad.
Si se trata de un esquema de base de datos “heredado” en el que necesita escribir consultas SQL bastante complicadas, es probable que iBATIS funcione mejor.
HQL (Hibernate Query Language) es otro lenguaje que tendrá que aprender e incluso entonces probablemente encontrará casos en los que todavía Necesito escribir SQL. Además, es probable que algunos dediquen medio día a averiguar la combinación correcta de XML, propiedades, anotaciones, etc. para que Hibernate genere una consulta SQL eficaz.
No existe una respuesta universal “A es mejor que B” para esta pregunta.
Considere lo que está tratando de lograr. Normalmente, el Segregación de respuesta a consultas de comando
El modelo funciona bien para dominios complejos.
La razón es que, por lo general, intentas hacer una de estas dos cosas:
- Crear / actualizar / eliminar algunas entidades de dominio complejas
- Ejecutar consultas de búsqueda analítica (es decir, consultas de suma / agregación)
Hibernar funciona bien para el caso 1, lo que le permite crear un POJO y conservarlo / actualizarlo. También lo hace rápidamente, a menos que su dominio sea bastante grande.
myBatis es ideal para consultas de búsqueda (caso 2) en las que solo desea una respuesta. Hibernate intentaría cargar todo el gráfico de objetos y necesitaría comenzar a ajustar las consultas con los trucos de LazyLoading para mantenerlo funcionando en un dominio grande. Por el contrario, si solo desea una página POJO analítica, la implementación myBatis de la misma consulta sería trivial.
Debido a esto, myBatis es más rápido que Hibernate en SELECTS.
Estos dos casos son la diferencia entre Comandos donde desea cambiar los datos del dominio y Respuestas donde solo desea obtener algunos datos.
Entonces, considere estos dos casos y lo que hace su aplicación. Si tiene un dominio simple y solo busca información, use myBatis. Si tiene un dominio complejo y persiste entidades, use Hibernate. Si hace ambas cosas, considere un enfoque híbrido. Eso es lo que usamos en nuestro proyecto que tiene miles de entidades para mantenerlo bajo control. 😉
ORM vs marco de persistencia
Hibernate es un marco de mapeo de relación de objetos (ORM) que mapea clases de Java a tablas de bases de datos. MyBatis es un marco de persistencia, no ORM. Asigna declaraciones SQL a métodos Java.
Esquema de base de datos
Hibernate puede crear o validar el esquema de la base de datos de acuerdo con su modelo Java, mientras que MyBatis no tiene dicha característica. También es conveniente para el entorno de prueba cuando está utilizando una base de datos en memoria. Discusiones relacionadas:
- ¿MyBatis puede crear el esquema de la base de datos?
Cache
Hibernate tiene caché de primer nivel que es imposible de deshabilitar. Significa que si consulta el elemento a través de ORM y luego lo elimina directamente con SQL, permanece en la caché. Puede borrar explícitamente la caché para obtener los resultados más actualizados de la base de datos. Discusiones relacionadas:
- ¿Jpa e Hibernate cargan datos que cambian de forma asincrónica en la base de datos?
- ¿Qué es el almacenamiento en caché de primer y segundo nivel en Hibernate?
Gestión optimista de cerraduras
También existen diferencias para la gestión optimista de bloqueos:
MyBatis no admite el control de concurrencia optimista de forma nativa, a diferencia de las herramientas ORM como Hibernate / JPA con la anotación @Version.
Discusiones relacionadas:
- Control de concurrencia optimista
- Cómo evitar problemas de concurrencia en ACTUALIZAR a través de iBatis
Carga lenta
Hibernate intentará cargar el gráfico de objetos completo, excepto los objetos que están marcados para carga diferida. myBatis cargará los datos de acuerdo con una consulta SQL. La carga diferida puede mejorar el rendimiento, pero puede causar fugas de conexión si se usa con
propiedades. Discusiones relacionadas:
- org.hibernate.LazyInitializationException – no se pudo inicializar el proxy – no hay sesión
- Resuelva el problema de Hibernate Lazy-Init con hibernate.enable_lazy_load_no_trans
Gestión de sesiones de hibernación
Las operaciones de entidades como guardar, actualizar o eliminar se realizan a través de Hibernate Session. Requiere una buena comprensión de cómo implementar una estrategia adecuada de administración de sesiones de Hibernate para evitar detached entity passed to persist
y otros fenómenos relacionados con Hibernate.
A veces puede tomar más tiempo tratar de comprender el comportamiento subyacente de Hibernate que agregar un poco más de trabajo y escribir declaraciones SQL sin procesar para myBatis.
En cascada
Hibernate proporciona funciones en cascada, eliminación de huérfanos y otras funciones para gráficos de objetos mientras no estén presentes en myBatis; para implementarlos, deberá escribir consultas SQL explícitamente.
Consultas
En myBatis escribirás consultas SQL casi simples. Hibernate tiene múltiples opciones para realizar consultas: SQL, HQL, Criteria API. A veces, puede ser adecuado utilizar la API de criterios cuando tiene muchos campos opcionales en los criterios. Proporcionaría un enfoque más estructurado para formular consultas y tal vez evitaría errores relacionados.
Sección de Reseñas y Valoraciones
Si haces scroll puedes encontrar las interpretaciones de otros gestores de proyectos, tú asimismo tienes la libertad de insertar el tuyo si dominas el tema.