Capítulo 1 Hibernado y MyBatis
Hibernate es el marco de mapeo O/R más popular en la actualidad. Nació en SF.NET y ahora se ha convertido en parte de JBoss. MyBatis es otro excelente marco de mapeo O/R. Actualmente pertenece a un subproyecto de Apache.
Sitio web oficial de referencias de MyBatis: http://www.mybatis.org/core/zh/index.html
Materiales de referencia de Hibernate: http://docs.jboss.org/hibernate/core/3.6/reference/zh-cn/html_singing
1.1 Introducción a Hibernate
Hibernate proporciona una encapsulación relativamente completa de la estructura de la base de datos. El mapeo O/R de Hibernate implementa el mapeo entre POJO y las tablas de bases de datos, así como la generación automática y la ejecución de SQL. Los programadores a menudo solo necesitan definir la relación de mapeo entre POJO y las tablas de la base de datos, y pueden completar las operaciones de la capa de persistencia a través de los métodos proporcionados por Hibernate. Los programadores ni siquiera necesitan ser competentes en SQL. Hibernate/OJB generará automáticamente el SQL correspondiente y llamará a la interfaz JDBC para ejecutar de acuerdo con la lógica de almacenamiento establecida.
1.2 Introducción a MyBatis
El enfoque de Ibatis está en la relación de mapeo entre POJO y SQL. Luego, al asignar el archivo de configuración, los parámetros requeridos por SQL y los campos de resultados devueltos se asignan al POJO especificado. En comparación con la "O/R" de Hibernate, Ibatis es una implementación de ORM de "Mapeo SQL".
Capítulo 2 Comparación de desarrollo
Velocidad de desarrollo
El verdadero dominio de Hibernate es más difícil que mybatis. El marco de MyBatis es relativamente simple y fácil de usar, pero también es relativamente simple. Personalmente, creo que en usar MyBatis bueno, primero debes entender Hibernate.
Comunidad de desarrollo
Hibernate y MyBatis son marcos populares de desarrollo de capas de persistencia, pero la comunidad de desarrollo de hibernación es relativamente animada, admite muchas herramientas y las actualizaciones son más rápidas. La versión más alta actual es 4.1.8. MyBatis es relativamente tranquilo y tiene menos herramientas, y la versión más alta actual es 3.2.
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 requiere una escritura manual de declaraciones SQL y resultados de resultados. Hibernate tiene un buen mecanismo de mapeo, por lo que los desarrolladores no necesitan preocuparse por la generación de SQL y el mapeo de resultados, y pueden centrarse más en los procesos comerciales.
Capítulo 3 Comparación de ajuste del sistema
El plan de ajuste de Hibernate desarrolla una estrategia de almacenamiento en caché razonable;
Intente usar la función de carga perezosa;
Adoptar un mecanismo de gestión de sesiones razonable;
Use el agarre por lotes y establezca parámetros de lotes razonables (Batch_Size);
Realizar un diseño razonable de mapeo O/R
Solución de ajuste mybatis
MyBatis es consistente con el ciclo de vida de la sesión de Hibernate en términos de sesión, y también se requiere un mecanismo de gestión de sesión razonable. MyBatis también tiene un mecanismo de caché de nivel 2. MyBatis puede realizar un diseño detallado de optimización SQL.
Aspectos de optimización de SQL
La consulta de Hibernate consultará todos los campos de la tabla, lo que causará el consumo de rendimiento. Hibernate también puede escribir SQL para especificar los campos que deben ser consultados, pero esto destruye la simplicidad del desarrollo hibernado. MyBatis 'SQL está escrito manualmente, por lo que puede especificar los campos para la consulta según sea necesario.
El ajuste de las declaraciones HQL de Hibernate requiere la impresión de SQL, y a muchas personas no les gusta el SQL de Hibernate porque es demasiado feo. MyBatis 'SQL está escrito manualmente por usted mismo, por lo que es fácil de ajustar. Pero Hibernate tiene sus propias estadísticas de registro. MyBatis en sí no contiene estadísticas de registro y usa log4j para registro.
Escalabilidad
La asociación entre bases de datos hibernadas y específicas solo debe configurarse en el archivo XML. Todas las declaraciones de HQL no tienen nada que ver con la base de datos específica utilizada y son muy portátiles. Todas las declaraciones SQL en el proyecto MyBatis dependen de la base de datos utilizada, por lo que el soporte para diferentes tipos de bases de datos no es bueno.
Capítulo 4 Gestión de objetos y estrategias de rastreo
Gestión de objetos
Hibernate es una solución completa de mapeo de objeto/relacional que proporciona la funcionalidad de la gestión del estado del objeto, por lo que los desarrolladores ya no necesitan prestar atención a los detalles del sistema de base de datos subyacente. Es decir, en comparación con los escenarios comunes de la capa de persistencia JDBC/SQL que requieren la gestión de las declaraciones SQL, Hibernate adopta una perspectiva más natural orientada a objetos para persistir en datos en aplicaciones Java.
En otras palabras, los desarrolladores que usan Hibernate siempre deben prestar atención al estado del objeto y no tienen que considerar la ejecución de las declaraciones SQL. Esta parte de los detalles ha sido administrada por Hibernate y solo los desarrolladores deben entender al ajustar el rendimiento del sistema.
MyBatis no tiene documentación en esta área, por lo que los usuarios necesitan administrar los objetos en detalle.
Estrategia de rastreo
Hibernate tiene un buen mecanismo para rastrear objetos asociados a la entidad. Para cada relación de asociación, se puede establecer en detalle si retrasa la carga, y se proporcionan cuatro modos: rastreo de asociación, rastreo de consultas, rastreo de subcontrol y rastreo por lotes. Está configurado y procesado en detalle.
La carga perezosa de MyBatis está configurada a nivel mundial.
Capítulo 5 Comparación de mecanismos de caché
Caché hibernado
Hibernate Nivel 1 El caché es un caché de sesión. Si hace un buen uso del caché de nivel 1, debe administrar bien el ciclo de vida de la sesión. Se recomienda utilizar una sesión en una operación de acción. El caché de nivel 1 requiere una gestión estricta de la sesión.
Hibernate Level 2 El caché es un caché de nivel de sesión de sesión. El caché de SessionFactory se divide en caché incorporado y caché externo. Los datos de almacenamiento de caché incorporados contenidos en algunos atributos de recopilación del objeto SessionFactory (mapeo de datos de elementos y declaraciones SQL predeterminadas, etc.), que solo es de lectura para aplicaciones. El caché externo almacena una copia de los datos de la base de datos, que es similar al caché primario. Además de usar la memoria como medio de almacenamiento, el caché secundario también puede usar dispositivos de almacenamiento externos como discos duros. El caché secundario se llama caché de nivel de proceso o caché de nivel de sesión de sesión. Se puede compartir por todas las sesiones, y su ciclo de vida existe y desaparece con el ciclo de vida de SessionFactory.
Caché mybatis
MyBatis contiene una función de caché de consulta muy potente que se puede configurar y personalizarse muy fácilmente. Se han implementado muchas mejoras en la implementación de caché en MyBatis 3, lo que lo hace más poderoso y fácil de configurar.
Por defecto, el almacenamiento en caché no está habilitado. Además del caché de sesión local, puede mejorar la monetización y manejar dependencias circulares también son necesarias. Para habilitar el caché de nivel 2, debe agregar una línea a su archivo de asignación SQL: <cache/>
Eso es literalmente. El efecto de esta declaración simple es el siguiente:
Todas las declaraciones de selección en el archivo de la declaración de asignación se almacenarán en caché.
Todos insertar, actualizar y eliminar declaraciones en el archivo de la declaración de mapeo Actualizar el caché.
El caché se recuperará utilizando el algoritmo menos utilizado recientemente (LRU, el menos recientemente usado).
Dependiendo del cronograma (como sin intervalo de descarga, sin intervalo de actualización), el caché no se actualizará en ningún orden cronológico.
El caché almacena 1024 referencias a una colección u objeto de lista (independientemente de lo que devuelva el método de consulta).
El caché se considera un caché de lectura/escritura (legible/escritura), lo que significa que la recuperación de objetos no se comparte y puede ser modificada de manera segura por la persona que llama sin interferir con modificaciones potenciales hechas por otras personas que llaman o hilos.
Todas estas propiedades pueden modificarse por las propiedades de los elementos de caché.
Por ejemplo: <Cache Eviction = "FIFO" FLUSHINTERVAL = "60000" size = "512" readOnly = "true"/>
Esta configuración más avanzada crea un caché FIFO y actualiza cada 60 segundos, guardando 512 referencias al objeto o lista de resultados, y el objeto devuelto se considera de solo lectura, por lo que modificarlas entre las llamadas en diferentes hilos conducirá a conflictos. Las estrategias de recuperación disponibles son, el valor predeterminado es LRU:
LRU menos usado recientemente: elimine objetos que no se han utilizado durante mucho tiempo.
FIFO First-in First-Out: Elimine los objetos en el orden en que ingresan al caché.
Referencia suave suave: elimina los objetos basados en el estado del recolector de basura y las reglas de referencia suave.
Referencias débiles débiles: elimine más agresivamente objetos basados en el estado del recolector de basura y las reglas de referencia débiles.
FlushInterval se puede establecer en cualquier entero positivo, y representan una forma de período de tiempo de milisegundo razonable. El valor predeterminado no está establecido, es decir, no hay intervalo de actualización, y el caché se actualiza solo cuando se llama a la declaración.
El tamaño (número de referencias) se puede establecer en cualquier entero positivo, recuerde la cantidad de objetos que almacena en caché y la cantidad de recursos de memoria disponibles en su entorno de ejecución. El valor predeterminado es 1024.
La propiedad Readonly se puede establecer en True o False. Un caché de solo lectura devuelve la misma instancia del objeto de caché a todas las personas que llaman. Por lo tanto, estos objetos no pueden modificarse. Esto proporciona importantes ventajas de rendimiento. Un caché legible y escritable devuelve una copia del objeto de caché (por serialización). Esto será más lento, pero seguro, por lo que es falso de forma predeterminada.
Similitudes
Además de utilizar el mecanismo de almacenamiento en caché predeterminado del sistema, los cachés secundarios de Hibernate y MyBatis pueden sobrescribir por completo el comportamiento de caché implementando su propio caché o creando adaptadores para otras soluciones de caché de terceros.
Diferencias
La configuración secundaria de caché de Hibernate se configura en detalle en el archivo de configuración generado por SessionFactory, y luego se configura en el mapa específico de objeto de tabla.
La configuración secundaria de caché de MyBatis se configura en detalle en cada mapa específico de objeto de tabla, de modo que se puedan personalizar diferentes mecanismos de caché para diferentes tablas. Y MyBatis puede compartir la misma configuración e instancia de caché en el espacio de nombres, que se implementa a través de Cache-Ref.
Comparación de los dos
Debido a que Hibernate tiene un buen mecanismo de gestión para los objetos de consulta, los usuarios no necesitan preocuparse por SQL. Por lo tanto, si los datos sucios aparecen cuando se usa el caché secundario, el sistema informará un error y un mensaje.
En este sentido, MyBatis requiere un cuidado especial al usar la caché L2. Si el alcance de las operaciones de actualización de datos no puede determinarse completamente, evite el uso de caché ciego. De lo contrario, la aparición de datos sucios traerá grandes peligros ocultos al funcionamiento normal del sistema.
Capítulo 6 Comparación y resumen de Hibernate y MyBatis
Las similitudes entre los dos
Hibernate y MyBatis pueden generar SessionFactory a partir del archivo de configuración XML a través de SessionFactoryBuider, y luego generar Session desde SessionFactory, y finalmente ejecutar transacciones y declaraciones SQL. Entre ellos, los ciclos de vida de SessionFactoryBuider, SessionFactory y Session son casi los mismos.
Tanto Hibernate como MyBatis admiten las transacciones JDBC y JTA.
Ventajas mybatis
MyBatis puede realizar optimizaciones SQL más detalladas y reducir los campos de consulta.
MyBatis es fácil de dominar, mientras que Hibernate tiene un umbral más alto.
Ventajas de hibernación
El desarrollo de la capa DAO de Hibernate es más simple que MyBatis, que requiere el mantenimiento de SQL y el mapeo de resultados.
Hibernate mantiene y almacena objetos mejor que mybatis, y es más conveniente mantener objetos que se agregan, eliminan, modifican y marcan.
La base de datos de Hibernate tiene una buena portabilidad, la base de datos de MyBatis tiene poca portabilidad y diferentes bases de datos deben escribir diferentes SQL.
Hibernate tiene un mejor mecanismo de caché L2, que puede usar caché de terceros. MyBatis en sí proporciona mecanismos de almacenamiento en caché deficientes.
Otros Resumen
Hibernate tiene funciones potentes, buena irrelevancia de la base de datos y fuertes capacidades de mapeo O/R. Si tiene bastante competencia en hibernar y encapsula adecuadamente la hibernación, entonces todo el código de la capa de persistencia de su proyecto será bastante simple, hay muy poco código para escribir y la velocidad de desarrollo es muy rápida y muy genial.
La desventaja de Hibernate es que el umbral de aprendizaje no es bajo, y debe ser competente en él. Debe tener una fuerte experiencia y capacidad para diseñar el mapeo O/R, cómo equilibrar el modelo de rendimiento y los objetos, y cómo usar bien Hibernate.
Ibatis es fácil de comenzar, aprender y usar, proporciona una función de enlace de objetos automático para consultas de bases de datos y continúa con una buena experiencia de uso de SQL. Es bastante perfecto para proyectos que no tienen requisitos de modelo de objetos tan altos.
La desventaja de Ibatis es que el marco sigue siendo relativamente simple y las funciones aún faltan. Aunque el código de enlace de datos se simplifica, toda la consulta de la base de datos subyacente en realidad debe escribirse 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.