Bid star 2.9w + en GitHub, granjero de código de TI de 20 años compiló y compartió documentos internos de alto secreto de análisis en profundidad del código fuente MyBatis, y aumentó directamente el salario en 20K ~

Prefacio

Como marco de capa de persistencia, MyBatis es popular entre los desarrolladores de Java por su compacidad, ligereza, capacidad de configuración SQL y facilidad de uso.

Sin embargo, la comprensión de la mayoría de los desarrolladores del marco MyBatis se limita al uso y no comprende los principios de implementación subyacentes del marco. Como desarrollador, al leer el código fuente del marco de código abierto, puede aprender la aplicación de patrones de diseño y principios de diseño orientado a objetos en el código fuente, lo que ayuda a mejorar su capacidad de codificación. En mi tiempo libre, el autor ha estudiado en profundidad el código fuente del framework MyBatis, este artículo analizará los principios de implementación de las distintas funcionalidades del framework MyBatis desde la perspectiva del código fuente.

Características de este artículo:

  • Rastreo hasta la fuente: comenzando desde la aplicación básica de MyBatis, profundizando en la implementación subyacente y entendiendo el marco MyBatis en profundidad
  • Impulsado por problemas: haga preguntas sobre el fenómeno y luego explore la respuesta del código fuente con el problema
  • Extenso: cubra los puntos de conocimiento básicos de MyBatis, analice la implementación subyacente y comprenda completamente MyBatis

 

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Este artículo te presentará tres partes: índice, contenido principal y resumen. Espero que puedas leerlo con atención, comprender su esencia y ser capaz de comprenderlo por completo y pasar de manera flexible al trabajo. ¡Espero que este artículo sea del agrado de todos! !

Tabla de contenido

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

contenido principal

Este artículo se divide principalmente en dos capítulos: el primer capítulo es el código fuente de MyBatis 3 (capítulos 1 ~ 11), que presenta principalmente la implementación del código fuente de cada función del marco MyBatis; el segundo capítulo es el código fuente de MyBatis Spring (capítulos 12 ~ 13), principalmente Introducir el principio de integración del marco MyBatis y el marco Spring y los detalles de implementación del módulo MyBatis Spring. El siguiente es un esquema del libro.

El Capítulo 1 Creación del entorno de código fuente MyBatis, principalmente presenta cómo construir un entorno de depuración de código fuente MyBatis, incluida la forma de obtener el código fuente del marco MyBatis, cómo importar herramientas de desarrollo integradas y cómo ejecutar casos de prueba en código fuente MyBatis.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El segundo capítulo explica la especificación JDBC en detalle. El marco MyBatis es una encapsulación ligera de JDBC. Una buena comprensión de la especificación JDBC ayuda a comprender los principios de implementación del marco MyBatis. Este capítulo presentará los detalles relevantes de la especificación JDBC en detalle.Los lectores que hayan dominado completamente la especificación JDBC pueden omitir este capítulo.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El Capítulo 3 Clases de herramientas comunes de MyBatis, presenta las clases de herramientas más utilizadas en el marco MyBatis y evita que los lectores no estén familiarizados con el uso de estas herramientas y causen interferencias con el proceso principal del marco.Estas clases de herramientas incluyen MetaObject, ObjectFactory, ProxyFactory, etc.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El Capítulo 4 Introducción a los Componentes Principales de MyBatis , presenta los componentes centrales de MyBatis, incluyendo Configuración, SqlSession, Executor, MappedStatement, etc., incluyendo el rol de estos componentes y el proceso central de MyBatis ejecutando sentencias SQL.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 5 Proceso de creación de SqlSession, este capítulo primero presenta los pasos del análisis de archivos XML XPath (la clase de herramienta MyBatis XPathParser encapsula la API relacionada con XPath en el JDK, que puede simplificar el proceso de análisis de archivos XML) y el uso de la clase de herramienta XPathParser. A continuación, se presenta el proceso de creación de la instancia SqlSession, el componente central de MyBatis. Antes de que se cree la instancia de SqlSession, la clase de herramienta XPathParser se utilizará para analizar el archivo de configuración principal de MyBatis y convertir la información de configuración en un objeto de configuración. Dado que SqISession se crea en modo de fábrica, debe crear el objeto SqlSessionFactory antes de crear el objeto SqlSession. El objeto SqlSessionFactory contiene una referencia al objeto de configuración. Después de tener el objeto SqISessionFactory, llame al método openSession) del objeto SqlSessionFactory para crear el objeto SqlSession.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

El Capítulo 6 SqlSession ejecuta el proceso Mapper La configuración de Mapper en MyBatis se divide en dos partes, a saber, la interfaz Mapper y la configuración SQL de Mapper. MyBatis crea el objeto proxy de la interfaz Mapper a través de un proxy dinámico. La clase MapperProxy define la lógica de interceptación cuando se ejecuta el método Mapper. La instancia del proxy se crea a través de MapperProxyFactory. Cuando MyBatis inicia, registrará MapperProxyFactory en el objeto Configuración. Además, MyBatis describe la información de configuración de Mapper SQL a través de la clase MappedStatement.Cuando el marco se inicia, analizará la configuración de Mapper SQL y registrará todos los objetos MappedStatement en el objeto de configuración.

Cuando se llama al método definido en la interfaz Mapper a través del objeto proxy Mapper, se ejecutará la lógica de intercepción en la clase MapperProxy, y la llamada del método Mapper se convertirá al método API proporcionado por SqIlSession. En el método API de SqlSession, busque el objeto MappedStatement correspondiente a través del ld de Mapper, obtenga la información SQL correspondiente, opere el objeto de declaración JDBC a través de StatementHandler para completar la interacción con la base de datos y luego procese el conjunto de resultados a través de ResultSetHandler y devuelva el resultado al llamador.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 7 MyBatis Cache, este capítulo primero presenta los detalles del uso de MyBatis Level 1 Cache y Level 2 Cache, luego introduce el principio de implementación de Level 1 Cache y Level 2 Cache, y finalmente presenta cómo MyBatis integra Redis como Level 2 Cache.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 8 Implementación de MyBatis Log. El registro es una parte indispensable de las aplicaciones Java. Hay muchos marcos de registro de código abierto en lenguaje Java. Los más famosos son Log4j, Logback, SLF4J, etc. Si no conoce la relación entre estos marcos de registro, simplemente Puede causar conflictos entre los marcos de registro en el proyecto, y el uso de marcos de terceros o marcos de registro introducidos indirectamente por los kits de herramientas causará confusión en la salida del registro del proyecto, por lo que es necesario comprender la relación entre estos marcos de registro.

Este capítulo presenta primero el sistema de registro en lenguaje Java, así como el historial de desarrollo de cada marco de registro y la relación entre ellos. Luego introdujo la implementación de registro del marco MyBatis. A través del estudio de este capítulo, aprendimos que el marco MyBatis puede encontrar automáticamente el marco de registro del Classpath sin especificar la implementación del registro. El orden de búsqueda del marco de registro es SLF4J → JCL → Log4j 2 → Log4j → JUL → No Logging, si está en el Classpath Si el paquete JAR correspondiente al marco de registro se encuentra en el marco de registro, el marco de registro se utiliza para generar el registro.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 9 Principio de implementación de SQL dinámico. Este capítulo primero introduce el uso de SQL dinámico en MyBatis y luego presenta varios conceptos relacionados en SQL dinámico. Entre ellos, SqlSource se usa para describir la información de recursos SQL en MyBatis, y LanguageDriver se usa para analizar la configuración de SQL. Convierta la información de configuración de SQL en objetos SqlSource. SqINode se utiliza para describir información de etiquetas como <if, <where> en SQL dinámico. Cuando LanguageDriver analiza la configuración de SQL, convertirá etiquetas SQL dinámicas como <if> y <where> en objetos SqINode. Encapsulado en SqlSource. El objeto SqlSource analizado se almacenará en el objeto MappedStatement como un atributo del objeto MappedStatement. Cuando se ejecuta el asignador, se llama al método getBoundSql) del objeto SqlSource para obtener el objeto BoundSql de acuerdo con la información del parámetro pasada. Este proceso completa el proceso de conversión del objeto SqINode en una declaración SQL.

La última sección de este capítulo también presenta la diferencia entre los marcadores de posición de parámetro # {y S} en MyBatis, aquí hay una breve descripción, el marcador de posición # {será reemplazado por "?", Y luego llamar a setXXX () del objeto PreparedStatement en JDBC El método establece el valor del marcador de posición del parámetro, y el marcador de posición $ {} se reemplazará directamente con el contenido del texto del parámetro pasado.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 10 Principio y aplicación del plugin MyBatis, MyBatis proporciona un mecanismo de extensión que puede cambiar el comportamiento de ejecución de SQL cuando se ejecuta el Mapper. Este mecanismo de extensión se implementa a través de interceptores, y los interceptores definidos por el usuario también se denominan complementos MyBatis. El marco MyBatis admite la interceptación de los métodos de los componentes Executor.ParameterHandler, ResultSetHandler y StatementHandler. Este capítulo presenta el principio de implementación del complemento MyBatis, y luego presenta cómo implementar un complemento de consulta de paginación y un complemento de estadísticas SQL lento a través de un caso.Cuando las funciones requeridas por el lector no pueden ser cumplidas por el marco MyBatis, puede considerar implementarlo a través de un complemento personalizado.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 11 Mapeo en cascada y carga diferida de MyBatis, las bases de datos relacionales pueden mantener relaciones uno a uno o uno a muchos a través de claves externas, y MyBatis completa consultas en cascada uno a uno o a muchos a través del mapeo en cascada. Este capítulo presenta el uso del mapeo en cascada de MyBatis. A través del estudio de este capítulo, hemos aprendido que en la configuración de MyBatisMapper, el mapeo uno a uno se establece a través de la etiqueta <association>, y el mapeo uno a muchos se establece a través de la etiqueta <collection>.

Hay dos métodos de mapeo para las etiquetas <association> y <collection>. Un método es asociar un mapeador de consultas externo para las propiedades de la entidad Java; el otro método es configurar el mapeo para cada campo de las propiedades de la entidad y luego asociarlo a través de la declaración JOIN Preguntar. Luego, este capítulo también presenta la implementación del código fuente del mapeo en cascada de MyBatis. Finalmente, este capítulo presenta el principio de implementación del mecanismo de carga diferida de MyBatis.

La carga diferida de MyBatis se implementa a través de proxy dinámico. Cuando la configuración de carga diferida está activada, el resultado de llamar a la consulta Mapper es el objeto proxy creado por Cglib o Javassist. Cuando se llama al método Getter del objeto proxy para obtener el valor de la propiedad, se ejecutará el proxy dinámico relacionado. Lógica de interceptación, en la lógica de interceptación, se juzga si el atributo de la entidad está configurado con carga diferida, y si lo está, se ejecuta una consulta adicional para completar el valor del atributo.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 12 En los casos de integración de MyBatis y Spring, en muchos casos, no usamos el marco MyBatis solo, sino que lo integramos con el marco Spring actual de loC. La integración del marco MyBatis y el marco Spring requiere el módulo MyBatis Spring. Este capítulo presenta los pasos de integración del marco MyBatis y el marco Spring, y presenta la mejor práctica para integrar MyBatis y el marco Spring con un caso de registro de usuario. Al aprender el código fuente de MyBatis, aprendimos que la instancia Mapper de MyBatis se crea a través de un proxy dinámico.

Después de la integración con el marco Spring, el objeto proxy dinámico Mapper en MyBatis se registrará en el contenedor Spring como un bean en el marco Spring. El capítulo 13 comienza a introducir el principio de integración del marco MyBatis y el marco Spring.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Capítulo 13 Principios de implementación de MyBatis Spring En la mayoría de los casos , el marco MyBatis se integrará con el marco actual de loC principal Spring, y la integración del marco MyBatis y el marco Spring requiere la ayuda del módulo MyBatis Spring. Para facilitar a los lectores la comprensión de los principios de la integración del framework MyBatis y Spring, este capítulo primero introduce algunos conceptos en el framework Spring y el proceso de inicio del framework Spring. Luego presentó cómo el objeto proxy dinámico Mapper en MyBatis se integra en el contenedor Spring.

A través del estudio de este capítulo, hemos aprendido que después de que MyBatis se integra con el marco Spring, cuando se inicia el marco Spring, escaneará la interfaz Mapper bajo la ruta especificada, convertirá la interfaz Mapper al objeto BeanDefinition en Spring y luego modificará el atributo beanClass del objeto BeanDefinition a MapperFactoryBean , De modo que el marco Spring creará instancias de Bean basadas en el atributo beanClass del objeto BeanDefinition después de que todas las configuraciones de Bean se conviertan en objetos BeanDefinition. Entonces, después de que se inicie el marco de Spring, creará un objeto MapperFactoryBean para cada interfaz Mapper.Cuando obtenemos el Bean a través de la interfaz Mapper, lo que obtenemos es el objeto devuelto por el método getObject () del objeto MapperFactoryBean. El método getObject () del objeto MapperFactoryBean llamará al método getMapper () del objeto SqlSession para crear un objeto proxy Mapper.

Finalmente, este capítulo presenta el principio de implementación de MyBatis integrando la gestión de transacciones Spring. El framework Spring utiliza el mecanismo ThreadLocal en Java para asegurar que el mismo objeto Connection siempre se obtenga en el mismo hilo.

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Este [Análisis en profundidad del código fuente de MyBatis3] tiene un total de 265 páginas, porque el contenido es demasiado, no vamos a introducir demasiado aquí, amigos que necesiten la versión completa, pueden reenviar este artículo para seguir al editor, escanear el código para obtener ! !

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

para resumir

Este artículo analiza el proceso de vinculación de Mapper, el principio de la base de datos operativa SqlSession y el principio de implementación de plug-ins desde la perspectiva del código fuente MyBatis, al mismo tiempo presenta algunas aplicaciones avanzadas de MyBatis y explora los patrones de diseño utilizados en el código fuente MyBatis.

Este artículo es adecuado para desarrolladores de Java, arquitectos y todos los lectores interesados ​​en proyectos de código abierto de Java que quieran comprender la implementación subyacente de MyBatis.

Espero que este artículo pueda ayudarlo a aprender, que pueda aprender estos conocimientos técnicos y continuar expandiendo su propia profundidad y amplitud técnica, ¡y espero que le guste!

El arquitecto senior Ali recopila y comparte documentos internos de análisis profundo de código fuente MyBatis de alto secreto

 

Supongo que te gusta

Origin blog.csdn.net/bjmashibing001/article/details/109396217
Recomendado
Clasificación