-Construcción del entorno del código fuente MyBatis y análisis general de la arquitectura

La última vez, demostré el uso básico de MyBatis en proyectos prácticos a través de un ejemplo del sistema de pedidos para ayudarlo a comenzar rápidamente a utilizar el marco MyBatis. Esta vez, lo llevaré a construir un entorno de depuración para el código fuente de MyBatis y analizar la estructura del código fuente de MyBatis por usted, lo que allanará el camino para el análisis del código fuente más adelante.

Instalación y puesta en marcha de MySQL La instalación y puesta en
marcha de datos relacionales es la base para depurar el código fuente de MyBatis. En la actualidad, muchas empresas de Internet consideran MySQL como la base de datos preferida, por lo que aquí también elijo la base de datos MySQL para depurar el código fuente de MyBatis.

  1. Descargue MySQL
    Primero, descargue la última versión de MySQL Community Server desde el sitio web oficial de MySQL. MySQL Community Server es una versión comunitaria del servidor MySQL, puedes probarlo gratis. Aquí elijo usar tar.gz para instalar, por lo que necesito descargar el paquete de instalación tar.gz correspondiente, como se muestra en el cuadro rojo en la siguiente figura:
    Inserte la descripción de la imagen aquí
    Interfaz de descarga de MySQL
  2. Después de configurar MySQL para
    descargar el paquete de instalación tar.gz, ejecuto el siguiente comando para descomprimir el paquete tar.gz y obtener el directorio mysql-8.0.22-macos10.15-x86_64.
tar -zxf mysql-8.0.22-macos10.15-x86_64.tar.gz

Luego ejecute el siguiente comando para ingresar al directorio de archivos de soporte:

cd ./mysql-8.0.22-macos10.15-x86_64/support-files

Ejecute el siguiente comando para abrir el archivo mysql.server y editarlo:

vim mysql.server

Aquí necesito establecer las variables basedir y datadir en el directorio raíz de MySQL y el directorio de datos en el directorio MySQL (como se muestra en la figura a continuación), y finalmente ejecutar el comando: wq para guardar los cambios en mysql.server y salir .
Inserte la descripción de la imagen aquí
Ejemplo de modificación de archivo mysql.server Figura
3. Después de iniciar MySQL
, ejecuté el siguiente comando para ingresar al directorio bin de MySQL:

cd ../bin/

Y ejecute el siguiente comando mysqld para inicializar MySQL, pero debe prestar atención a la información de parámetros agregada aquí, puede especificar el directorio raíz y el directorio de datos a través de los parámetros basedir y datadir.

./mysqld --initialize --user=root --basedir=/Users/xxx/Downloads/mysql-8.0.22-macos10.15-x86_64 --datadir=/Users/xxx/Downloads/mysql-8.0.22-macos10.15-x86_64/data

Una vez que el proceso de inicialización se completa normalmente, puede obtener la contraseña predeterminada inicial de MySQL en la línea de comando, como se muestra en la siguiente figura:

Inserte la descripción de la imagen aquí
Imagen de ejemplo de inicialización exitosa de MySQL
Con la contraseña predeterminada, puedo iniciar e iniciar sesión en el servicio MySQL. Primero, necesito saltar al directorio de archivos de soporte:

cd ../support-files/

Luego ejecute el siguiente comando para iniciar el servicio MySQL:

./mysql.server start

Una vez que el servicio MySQL se inicia normalmente, puede ver el resultado como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Ejemplo de inicio exitoso de MySQL Figura
4. Inicie sesión en MySQL y
luego salte al directorio bin:

cd ../bin/

Y ejecute el siguiente comando para iniciar sesión en MySQL usando la contraseña predeterminada obtenida anteriormente.

./mysql -uroot -p'rAUhw9e&VPCs'

Después de iniciar sesión, puede ingresar MySQL Shell, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Ejemplo de inicio de sesión exitoso en MySQL
Luego puedo cambiar la contraseña en MySQL Shell, los comandos específicos son los siguientes:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

Una vez que la ejecución sea exitosa, la próxima vez que use MySQL Shell para conectarse, deberá iniciar sesión con la nueva contraseña.

Finalmente, si desea cerrar el servicio MySQL, puede saltar al directorio de archivos de soporte y ejecutar el siguiente comando:

cd ../support-files/

./mysql.server stop

Si obtiene el siguiente resultado, significa que el servicio MySQL se ha cerrado con éxito:
Inserte la descripción de la imagen aquí
Diagrama de muestra del cierre de MySQL correctamente

También debe tenerse en cuenta aquí que en el proceso de desarrollo real, generalmente se usan clientes de interfaz gráfica MySQL, como Navicat, MySQL Workbench Community Edition, etc. Generalmente, MySQL solo se usará directamente en la línea de comandos de Linux de la máquina en línea. Shell realiza algunas operaciones.

Por supuesto, personalmente le recomiendo que utilice estos clientes de interfaz gráfica, que pueden mejorar la eficiencia de su desarrollo diario.
Construcción del entorno de código fuente MyBatis
Después de instalar e iniciar MySQL, puede comenzar a construir el entorno de código fuente MyBatis.

En primer lugar, debe instalar el entorno básico para el desarrollo de Java, como JDK, Maven y Git. La instalación de este software no se presentará aquí. Ya debe estar muy familiarizado con él.

A continuación, ejecute el siguiente comando para descargar el código fuente de MyBatis desde GitHub:

git clone https://github.com/mybatis/mybatis-3.git

Dependiendo de la velocidad de la red, variará el largo proceso de este proceso de descarga. Una vez completada la descarga, puede obtener el siguiente resultado:
Inserte la descripción de la imagen aquí
Diagrama de ejemplo de descarga de MyBatis
En este punto, obtuve un directorio mybatis-3 localmente y puedo ingresar al directorio ejecutando el siguiente comando cd:

cd ./mybatis-3/

Luego ejecute el siguiente comando git para cambiar de rama (este curso se basa en el código de la versión MyBatis 3.5.6 para su análisis):

git checkout -b mybatis-3.5.6 mybatis-3.5.6

Una vez que se completa el cambio, también puedo usar el siguiente comando git para verificar si el cambio de rama es exitoso:

git branch -vv

Aquí obtengo el resultado como se muestra en la figura a continuación, lo que significa que he cambiado a la etiqueta mybatis-3.5.6.
Inserte la descripción de la imagen aquí
diagrama de ejemplo de rama git

Finalmente, abro IDEA, selecciono Abrir o Importar, e importo el código fuente de MyBatis, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Diagrama de opciones de importación de IDEA Una vez
completada la importación, puede ver la estructura del código fuente de MyBatis, como se muestra a continuación. figura:
Inserte la descripción de la imagen aquí
Introducción a la arquitectura MyBatis
completa la configuración del entorno fuente de MyBatis. Después de eso, lo llevaré a analizar la arquitectura de MyBatis.

MyBatis se divide en tres capas de arquitectura, a saber, la capa de soporte básica, la capa de procesamiento central y la capa de interfaz, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

  1. Capa de soporte
    básico La capa de soporte básica es la base de todo el marco de MyBatis. Proporciona funciones muy básicas para todo el marco de MyBatis. Cada módulo proporciona una capacidad cohesiva y única. La capa de soporte básico de MyBatis puede basarse en estas capacidades individuales. en nueve módulos básicos como se muestra en la figura anterior.

Dado que la función del módulo de carga de recursos es muy simple y la frecuencia de uso no es alta, no lo presentaré aquí.Si está interesado, puede consultar los materiales relevantes para comprender y aprender. A continuación describiré brevemente las funciones básicas de los ocho módulos restantes, en el segundo módulo de este curso te llevaré a analizar en detalle la implementación específica de estos módulos básicos.

El primero es el módulo de conversión de tipos. En la implementación del sistema de órdenes mostrado en la lección anterior, podemos definir un alias para una clase a través de etiquetas en el archivo de configuración mybatis-config.xml El "mecanismo de alias" que se utiliza aquí es el módulo de conversión de tipos en la capa de soporte básico MyBatis. Logrado.

Además del "mecanismo de alias", el módulo de conversión de tipos también implementa la conversión mutua entre tipos JDBC y tipos Java en MyBatis. Esta función se refleja en la vinculación de parámetros reales y mapeo de escenarios ResultSet:

En el escenario en el que la plantilla SQL obliga al usuario a pasar los parámetros reales, el módulo de conversión de tipo convierte los datos de tipo Java en datos de tipo JDBC;

Al mapear el ResultSet al objeto de resultado, el módulo de conversión de tipo convierte los datos de tipo JDBC en datos de tipo Java.

La situación específica se muestra en la siguiente figura: El
Inserte la descripción de la imagen aquí
segundo es el módulo de registro. Los registros son la principal fuente de pistas para la resolución de problemas, la localización de errores y el bloqueo de cuellos de botella de rendimiento en nuestra práctica de producción.En cualquier sistema maduro, habrá módulos de registro con niveles razonables e información completa, y MyBatis no es una excepción. MyBatis proporciona un módulo de registro para integrar marcos de registro de terceros en el ecosistema Java. Este módulo actualmente puede integrar excelentes marcos de registro como Log4j, Log4j2 y slf4j.

El tercero es el módulo de herramientas de reflexión. La función de reflexión en Java es muy poderosa.Muchos marcos de código abierto se basan en la reflexión para lograr algunos requisitos relativamente flexibles, pero la mayoría de los programadores de Java rara vez utilizan la tecnología de reflexión directamente en su trabajo real. La caja de herramientas de reflexión de MyBatis es una capa de encapsulación basada en la reflexión de Java, que proporciona una interfaz API más flexible y conveniente para los usuarios superiores y, al mismo tiempo, almacena en caché los metadatos relacionados con la reflexión nativa de Java, lo que mejora la eficiencia de la ejecución del código de reflexión. el desempeño de la operación de reflexión.

El cuarto es el módulo Binding. En el ejemplo del sistema de pedidos presentado en la lección anterior, podemos obtener el proxy de la interfaz Mapper a través de SqlSession, y luego realizar las operaciones de la base de datos en el archivo Mapper.xml asociado a través de este proxy. De esta forma, algunos errores pueden avanzar al tiempo de compilación, y esta función la completa el módulo Binding.

Aquí se indica específicamente que cuando usamos MyBatis, no necesitamos escribir una implementación específica de la interfaz Mapper, sino que usamos el módulo Binding para generar automáticamente un objeto proxy dinámico para la interfaz Mapper. Para algunas operaciones de datos simples, también podemos usar anotaciones directamente en la interfaz Mapper. Incluso no es necesario escribir el archivo de configuración Mapper.xml, pero si el mapeo ResultSet y el SQL dinámico son muy complicados, se recomienda mantenerlo en el archivo de configuración Mapper.xml.

El quinto es el módulo de fuente de datos. Uno de los componentes centrales del marco de la capa de persistencia es la fuente de datos. Una fuente de datos con un rendimiento sobresaliente puede duplicar el rendimiento del sistema. MyBatis en sí proporciona un conjunto de buenas implementaciones de fuentes de datos, que también es la implementación predeterminada de MyBatis. Además, en el ecosistema Java, hay muchas fuentes de datos de código abierto excelentes para elegir. El módulo de fuente de datos de MyBatis también proporciona interfaces relacionadas para la integración con fuentes de datos de terceros, lo que también ofrece a los usuarios más opciones. Flexibilidad mejorada del cambio de fuente de datos.

El sexto es el módulo de caché. La base de datos es un almacenamiento muy básico en la generación de la práctica, y muchos datos comerciales caerán en la base de datos, por lo que los pros y los contras del rendimiento de la base de datos afectan directamente los pros y los contras del sistema empresarial de nivel superior. Muchas de nuestras empresas en línea se encuentran en el escenario de leer más y escribir menos. Cuando la base de datos encuentra un cuello de botella, el almacenamiento en caché es uno de los métodos más efectivos y más utilizados (como se muestra en la figura siguiente). El uso correcto del almacenamiento en caché puede interceptar algunas solicitudes de base de datos en la caché. En este nivel, esto puede reducir la presión sobre una parte de la base de datos y mejorar el rendimiento del sistema.
Inserte la descripción de la imagen aquí
Además de utilizar cachés externos de terceros como Redis y Memcached, los frameworks de persistencia generalmente también vienen con cachés integrados. Por ejemplo, MyBatis proporciona cachés de primer y segundo nivel. La implementación específica se encuentra en el módulo de caché de la capa de soporte básica.

Séptimo, el módulo analizador. En el ejemplo del sistema de pedidos de la lección anterior, podemos ver que hay dos archivos de configuración principales en MyBatis que deben analizarse, uno es el archivo de configuración mybatis-config.xml y el otro es el archivo de configuración Mapper.xml. Ambos archivos son analizados por el módulo analizador de MyBatis, que se basa principalmente en XPath para lograr un análisis eficiente de los archivos de configuración XML y diversas expresiones.

El octavo módulo de gestión de transacciones. El marco de la capa de persistencia generalmente proporciona un conjunto de mecanismos de gestión de transacciones para implementar el control de transacciones de la base de datos. MyBatis proporciona una abstracción simple de las transacciones en la base de datos y proporciona interfaces e implementaciones de transacciones simples y fáciles de usar. En circunstancias normales, los proyectos de Java se integrarán con Spring y el marco de Spring administrará los asuntos. En cursos posteriores, también explicaré en profundidad los principios de la integración de MyBatis y Spring, incluida la integración relacionada con la gestión de transacciones.

  1. Capa de procesamiento central Después de
    introducir la capa de soporte básica de MyBatis, analicemos la capa de procesamiento central de MyBatis.

La capa de procesamiento central es la implementación central de MyBatis, que implica la inicialización de MyBatis y todo el proceso de ejecución de una instrucción SQL. A continuación, presentaré la implementación de cada parte de la capa de procesamiento central.

El primero es el análisis de la configuración. Sabemos que MyBatis tiene tres lugares donde puede agregar información de configuración, a saber: archivo de configuración mybatis-config.xml, archivo de configuración Mapper.xml e información de anotación en la interfaz de Mapper. Durante la inicialización de MyBatis, se cargará la información de configuración y el objeto de configuración obtenido después del análisis se guardará en el objeto de Configuración.

Por ejemplo, las etiquetas utilizadas en el ejemplo del sistema de pedidos (es decir, las reglas de asignación del conjunto de resultados de la consulta personalizada) se analizarán en objetos ResultMap. Podemos usar el objeto Configuration obtenido para crear el objeto SqlSessionFactory (es decir, el objeto de fábrica que crea el objeto SqlSession), y luego crear el objeto SqlSession para realizar operaciones de base de datos.

El segundo es el módulo de análisis y secuencias de comandos de SQL. Lo más destacado de MyBatis debe ser su función SQL dinámica, sólo es necesario utilizar las etiquetas proporcionadas por MyBatis para generar dinámicamente las sentencias SQL ejecutadas de acuerdo con las condiciones reales de funcionamiento. Las etiquetas SQL dinámicas proporcionadas por MyBatis son muy ricas, incluidas etiquetas, etiquetas, etiquetas, etiquetas, etc.

El módulo de scripting en MyBatis es el módulo principal responsable de generar SQL dinámicamente. Analizará las etiquetas en el SQL dinámico de acuerdo con los parámetros reales pasados ​​por el usuario en tiempo de ejecución, y formará una plantilla SQL, luego procesará los marcadores de posición en la plantilla SQL, llenará los marcadores de posición con los parámetros reales en tiempo de ejecución y obtendrá la base de datos para ser una declaración SQL verdaderamente ejecutable.

El tercero es la ejecución de SQL. En MyBatis, para ejecutar una sentencia SQL se involucran muchos componentes, los principales son: Executor, StatementHandler, ParameterHandler y ResultSetHandler.

Entre ellos, el Ejecutor llamará al módulo de administración de transacciones para implementar el control relacionado con las transacciones, y al mismo tiempo administrará la caché de primer nivel y la caché de segundo nivel a través del módulo de caché. La ejecución real de la instrucción SQL será implementada por StatementHandler. ¿Cómo se hace exactamente? StatementHandler primero se basará en ParameterHandler para vincular los parámetros reales de la plantilla SQL, luego el objeto java.sql.Statement pasará la declaración SQL y los parámetros reales vinculados a la base de datos para su ejecución, obtendrá el ResultSet de la base de datos y, finalmente, ResultSetHandler vinculará el ResultSet Mapped en objetos Java y lo devolverá al llamador, este es el núcleo del módulo de ejecución de SQL.

La siguiente figura muestra el proceso central de MyBatis ejecutando una declaración SQL:

Inserte la descripción de la imagen aquí
El cuarto es el complemento. Muchos marcos maduros de código abierto proporcionan capacidades de expansión de varias formas. Cuando las capacidades nativas del marco no pueden cumplir con ciertos escenarios, se pueden implementar algunos complementos para que estos escenarios satisfagan las necesidades, de modo que el marco pueda tener suficiente vitalidad. Este es también el significado de la interfaz del complemento MyBatis.

Al mismo tiempo, en la aplicación real, también puede extender MyBatis a través de complementos personalizados o cambiar el comportamiento predeterminado de MyBatis. Debido a que los complementos pueden afectar el comportamiento del kernel de MyBatis, antes de personalizar los complementos, debe comprender los principios operativos internos de MyBatis para evitar escribir complementos que no cumplan con las expectativas, introduciendo algunos errores funcionales extraños o problemas de rendimiento.

  1. Capa de
    interfaz La capa de interfaz es una colección de interfaces expuestas a llamadas por MyBatis, estas interfaces son algunas de las más utilizadas cuando se usa MyBatis, por ejemplo, la interfaz SqlSession, la interfaz SqlSessionFactory, etc. Entre ellos, el más básico es la interfaz SqlSession, a través de la cual puede lograr muchas funciones, como obtener agentes Mapper, ejecutar declaraciones SQL y controlar cambios de transacciones.

Supongo que te gusta

Origin blog.csdn.net/Rinvay_Cui/article/details/113833353
Recomendado
Clasificación