Análisis del proceso de implementación de Mybatis (con recomendaciones detalladas de artículos y conjuntos de preguntas de entrevistas)
Si solo considera estos tres puntos, es fácil implementar un marco ORM simple, solo agregue algo de reflexión y expresiones regulares.
Así que si nos referimos a Mybatis, veamos cómo están diseñados sus distintos enlaces:
De hecho, la idea general es la misma. Necesita una estructura de datos para almacenar todas las variables y llamar a los métodos integrados en Sqlsession a través del proxy de interfaz. La diferencia es que el ejecutor real agrega otra capa, que es el ejecutor, y luego devuelve los datos a la persona que llama a través del JDBC original. Por supuesto, el Mybatis real incluye muchos patrones de diseño, fuentes de datos, cachés, SQL dinámico, transacciones de bases de datos, procesamiento de carga diferida, etc.
Para verificar el proceso de ejecución de mybatis, se utilizan dos métodos para llamar a la interfaz, como se muestra a continuación:
gt
Hay un pequeño punto Eso debe enfatizarse aquí. El ejecutor es ` ` Ejecutor ` ` `, usamos el siguiente código cada vez:
Al ver el código fuente, también puede ver la clase de implementación predeterminada de SqlSession. La interfaz es DefaultSqlSession.
Y la ejecución real del método, como el método selectList:
gt
# {} es procesamiento previo a la compilación, $ {} es cadena reemplazo. Cuando Mybatis procese #{}, reemplazará #{} en sql con? Número, llame al método
del informe preparado para establecer el valor asignado
Cuando Mybatis está procesando, es el tiempo de reemplazo, es decir, reemplazando {} con el valor de una variable; .
El uso de # {} puede prevenir eficazmente la inyección de SQL y mejorar la seguridad del sistema.
PD: La esencia de la ejecución de MyBatis es SQL, por lo que volver a la esencia puede entenderse simplemente como PreparedStatement y las declaraciones correspondientes.
La interfaz Dao es una interfaz de mapeador. El nombre completo de la interfaz es el valor del espacio de nombres en el archivo de mapeo; el nombre del método de la interfaz es el valor de identificación de la declaración del mapeador en el mapeo. archivo; los parámetros en el método de interfaz se pasan Parámetros dados a sql.
Principio de implementación: el principio de funcionamiento de la interfaz del asignador es el proxy dinámico JDK. Mybatis generará un objeto mapperProxy para cada agente Mapper. El objeto agente interceptará el método de interfaz, y el método de interfaz corresponderá automáticamente a sqlsession y finalmente lo ejecutará el 'Ejecutor'.
``Con diferentes parámetros, el método no se puede sobrecargar``, ¿por qué?
Como se mencionó anteriormente, mybatis tiene un enlace para analizar interfaces o archivos XML y construirá un objeto llamado mapperStatement para almacenar información relacionada con Mapper. ¿Cómo localiza y encuentra cada método de interfaz dao el MapperStatement correspondiente cuando se ejecuta?
Diagrama lógico fuente: