Comparación de Hibernate y Mybatis

Comparación de Hibernate y Mybatis

Primer aspecto: comparación de la velocidad de desarrollo

En cuanto a la velocidad de desarrollo, Hibernate es más difícil de dominar que Mybatis. El marco de Mybatis es relativamente simple y fácil de usar, pero también es relativamente simple. Personalmente, piense que si desea usar bien Mybatis, primero debe comprender Hibernate.

En comparación con la velocidad de desarrollo de los dos, no solo debemos considerar las características y el rendimiento de los dos, sino también considerar cuál es más adecuado para el desarrollo del proyecto de acuerdo con las necesidades del proyecto. Por ejemplo: básicamente no se utiliza una consulta complicada en un proyecto, es simple La adición, eliminación y modificación de la búsqueda, por lo que la eficiencia de elegir hibernar es muy rápida, debido a que la declaración SQL básica se ha encapsulado, no es necesario escribir una declaración SQL, lo que ahorra mucho tiempo, pero para un proyecto grande, declaraciones complejas Hay muchos, por lo que elegir hibernar no es una buena opción, Mybatis se acelerará mucho y la gestión de las declaraciones también es más conveniente.

Segundo aspecto: comparación de la carga de trabajo de desarrollo

Hibernate y MyBatis tienen herramientas de generación de código correspondientes. Se pueden generar métodos de capa DAO simples y básicos. Para consultas avanzadas, Mybatis necesita escribir manualmente declaraciones SQL y ResultMap. E Hibernate tiene un buen mecanismo de mapeo, los desarrolladores no necesitan preocuparse por la generación de SQL y el mapeo de resultados, puede centrarse más en los procesos comerciales.

El tercer aspecto: optimización de SQL

La consulta de Hibernate consultará todos los campos de la tabla, lo que consumirá rendimiento. Hibernate también puede escribir SQL para especificar los campos que deben consultarse, pero esto destruirá la simplicidad del desarrollo de Hibernate. El SQL de Mybatis se escribe manualmente, por lo que puede especificar los campos de consulta según sea necesario.

El ajuste de la instrucción Hibernate HQL necesita imprimir SQL, y muchas personas rechazan Hibernate SQL porque es demasiado feo. El SQL de MyBatis se escribe manualmente, por lo que es fácil de ajustar. Pero Hibernate tiene sus propias estadísticas de registro. Mybatis en sí no tiene estadísticas de registro y utiliza Log4j para el registro.

Cuarto aspecto: comparación de la gestión de objetos.

Hibernate es una solución completa de mapeo de objetos / relaciones, que proporciona funciones de gestión de estado de objetos (gestión de estado), por lo que los desarrolladores ya no necesitan prestar atención a los detalles del sistema de base de datos subyacente. En otras palabras, en comparación con el esquema de capa de persistencia JDBC / SQL común que necesita administrar declaraciones SQL, Hibernate utiliza una perspectiva más natural orientada a objetos para conservar datos en aplicaciones Java.

En otras palabras, los desarrolladores que usan Hibernate siempre deben prestar atención al estado del objeto, sin tener que considerar la ejecución de sentencias SQL. Esta parte de los detalles ha sido gestionada adecuadamente por Hibernate, y solo los desarrolladores deben comprenderla al ajustar el rendimiento del sistema. MyBatis no tiene documentación en esta sección, y los usuarios deben administrar los objetos ellos mismos en detalle.
Quinto aspecto: mecanismo de caché

Hibernate cache

El caché de primer nivel de Hibernate es el caché de sesión, y el uso del caché de primer nivel requiere la administración del ciclo de vida de la sesión. Se recomienda utilizar una sesión en una operación de acción. El caché de primer nivel requiere una gestión estricta de la sesión.

El caché de segundo nivel de Hibernate es el caché de nivel SessionFactory El caché de SessionFactory se divide en caché incorporado y caché externo. El caché incorporado almacena datos contenidos en algunos atributos de colección del objeto SessionFactory (datos de elementos de mapeo y sentencias SQL programadas, etc.). Para aplicaciones, es de solo lectura. La memoria caché externa almacena una copia de los datos de la base de datos y su función es similar a la memoria caché primaria.Además de la memoria como medio de almacenamiento, la memoria caché secundaria también puede usar dispositivos de almacenamiento externo como discos duros. El caché de segundo nivel se denomina caché de nivel de proceso o caché de nivel de SessionFactory, y puede ser compartido por todas las sesiones. Su ciclo de vida está acompañado por la existencia y desaparición del ciclo de vida de SessionFactory.

Caché MyBatis

MyBatis incluye una función de caché de consulta muy potente, que se puede configurar y personalizar fácilmente. Se han implementado muchas mejoras en la implementación de caché en MyBatis 3, lo que la hace más potente y fácil de configurar.

De forma predeterminada, la memoria caché no está habilitada. Además de la memoria caché de sesión local, puede mejorar la realización y tratar con dependencias circulares. Para habilitar el caché secundario, debe agregar una línea a su archivo de mapeo SQL: <caché />

Este es literalmente el caso. El efecto de esta simple declaración es el siguiente:

  1. Todas las declaraciones de selección en el archivo de declaración de asignación se almacenarán en caché.
  2. Todas las instrucciones de inserción, actualización y eliminación en el archivo de instrucciones de asignación actualizarán la memoria caché.
  3. La memoria caché se recuperará utilizando el algoritmo menos utilizado recientemente (LRU, menos utilizado recientemente).
  4. De acuerdo con la programación (como sin intervalo de descarga, sin intervalo de actualización), el caché no se actualizará en ningún orden cronológico.
  5. El caché almacena 1024 referencias a colecciones de listas u objetos (independientemente de lo que devuelva el método de consulta).
  6. La memoria caché se considerará una memoria caché de lectura / escritura, lo que significa que la recuperación de objetos no se comparte y la persona que llama puede modificarla de forma segura sin interferir con los posibles cambios realizados por otras personas que llaman o hilos.

Todos estos atributos se pueden modificar a través de los atributos del elemento de caché.

比如: <desalojo de caché = "FIFO" flushInterval = "60000 ″ size =" 512 ″ readOnly = "true" />

Esta configuración más avanzada crea un búfer FIFO y lo actualiza cada 60 segundos, almacenando 512 referencias al objeto o lista de resultados, y el objeto devuelto se considera de solo lectura, por lo que entre las personas que llaman en diferentes hilos Modificarlos causará conflictos. Las estrategias de recuperación disponibles son, el valor predeterminado es LRU:

  1. LRU-menos utilizado recientemente: eliminar objetos que no se han utilizado durante más tiempo.
  2. FIFO - primero en entrar, primero en salir: eliminar objetos en el orden en que ingresan al caché.
  3. Referencia SOFT-Soft: elimine objetos según el estado del recolector de basura y las reglas de referencia soft.
  4. Referencia Débil-Débil: Elimine objetos de forma más agresiva en función del estado del recolector de basura y las reglas de referencia débiles

flushInterval (intervalo de actualización) se puede establecer en cualquier número entero positivo, y representan un período de tiempo razonable en forma de milisegundos. De forma predeterminada, no está configurado, es decir, no hay intervalo de actualización y la memoria caché se actualiza solo cuando se llama a la instrucción.

el tamaño (número de referencias) se puede establecer en cualquier número entero positivo, recuerde el número de objetos que almacena en caché y el número de recursos de memoria disponibles en su entorno de ejecución. El valor predeterminado es 1024.

El atributo readOnly se puede establecer en verdadero o falso. Un caché de solo lectura devolverá la misma instancia del objeto de caché a todos los llamantes. Por lo tanto, estos objetos no pueden modificarse. Esto proporciona una ventaja de rendimiento muy importante. La memoria caché de lectura y escritura devolverá una copia del objeto en caché (a través de la serialización). Esto será más lento, pero seguro, por lo que el valor predeterminado es falso.

Similitudes : además de utilizar el mecanismo de almacenamiento en caché predeterminado del sistema, el caché de segundo nivel de Hibernate y Mybatis puede cubrir completamente el comportamiento de almacenamiento en caché mediante la implementación de su propio almacenamiento en caché o la creación de adaptadores para otras soluciones de almacenamiento en caché de terceros.

La diferencia: la configuración de caché secundaria de Hibernate se configura en detalle en el archivo de configuración generado por SessionFactory, y luego se configura en el mapeo de tabla-objeto específico es el tipo de caché.

La configuración de caché secundaria de MyBatis se configura en detalle en cada asignación específica de tabla-objeto, de modo que se pueden personalizar diferentes mecanismos de almacenamiento en caché para diferentes tablas. Y Mybatis puede compartir la misma configuración e instancia de caché en el espacio de nombres, a través de Cache-ref.

Comparación de los dos: debido a que Hibernate tiene un buen mecanismo de administración para los objetos de consulta, los usuarios no necesitan preocuparse por SQL. Por lo tanto, si aparecen datos sucios cuando se usa el caché secundario, el sistema informará un error y se le solicitará.

A este respecto, MyBatis debe ser especialmente cuidadoso al usar el caché de segundo nivel. Si no puede determinar completamente el alcance de la operación de actualización de datos, evite el uso oculto de Cache. De lo contrario, la aparición de datos sucios traerá grandes peligros ocultos para el funcionamiento normal del sistema.

Sexto aspecto: resumen

Para el resumen, puede ir a los principales foros de Java para echar un vistazo

Similitudes: tanto Hibernate como MyBatis pueden generar una SessionFactory a partir del archivo de configuración XML a través de SessionFactoryBuider, luego una SessionFactory genera una Sesión, y finalmente la Sesión inicia la ejecución de transacciones y sentencias SQL. El ciclo de vida de SessionFactoryBuider, SessionFactory y Session son similares.

  • Tanto Hibernate como MyBatis admiten el procesamiento de transacciones JDBC y JTA.

Ventaja de Mybatis

  • MyBatis puede realizar una optimización SQL más detallada y reducir los campos de consulta.
  • MyBatis es fácil de dominar e Hibernate tiene un umbral más alto.

Ventajas de Hibernate

  • El desarrollo de la capa DAO de Hibernate es más simple que MyBatis, y Mybatis necesita mantener SQL y la asignación de resultados.
  • Hibernate mantiene y almacena en caché los objetos mejor que MyBatis, y es conveniente mantener los objetos que se agregan, eliminan, modifican y verifican.
  • La portabilidad de la base de datos de Hibernate es muy buena, la portabilidad de la base de datos MyBatis no es buena, las diferentes bases de datos necesitan escribir diferentes SQL.
  • Hibernate tiene un mejor mecanismo de caché de segundo nivel, puede usar caché de terceros. El mecanismo de caché proporcionado por MyBatis en sí no es bueno.

Resumen de otros

  • Hibernate tiene funciones poderosas, buena independencia de la base de datos y una fuerte capacidad de mapeo de O / R. Si es bastante hábil en Hibernate y encapsula Hibernate adecuadamente, entonces todo el código de la capa de persistencia de su proyecto será bastante simple, y se necesita escribir muy poco código. , La velocidad de desarrollo es muy rápida, muy buena.
  • La desventaja de Hibernate es que el umbral de aprendizaje no es bajo, debe dominar el umbral más alto, y cómo diseñar el mapeo O / R, cómo equilibrar el rendimiento y el modelo de objetos, y cómo usar Hibernate bien, necesita una gran experiencia y habilidad. Muy bien
  • iBATIS es fácil de comenzar, está listo para usar, proporciona enlace automático de objetos para consultas de bases de datos y continúa con una buena experiencia de uso de SQL. Es perfecto para proyectos que no tienen requisitos de modelo de objeto tan altos.
  • La desventaja de iBATIS es que el marco sigue siendo relativamente primitivo y aún faltan funciones.Aunque el código de enlace de datos está simplificado, toda la consulta subyacente de la base de datos en realidad está escrita por sí misma, la carga de trabajo es relativamente grande y no es fácil adaptarse a la modificación rápida de la base de datos.
Publicado 12 artículos originales · ganó 9 · 10 mil visitas

Supongo que te gusta

Origin blog.csdn.net/finaly_yu/article/details/84998933
Recomendado
Clasificación