Análisis del principio de Mybatis (dos) el proceso de creación de SqlSession

En el artículo anterior, analizamos en profundidad lo que hizo SqlSessionFactory durante el proceso de creación, por lo que aquí continuaremos hablando sobre el siguiente paso de la creación de SqlSession. Haga clic aquí para aquellos que no leyeron el artículo anterior:

Análisis del principio de Mybatis (1) analizar el archivo de configuración xml global para generar SqlSessionFactory

En primer lugar, sabemos que en el proceso de creación de SqlSessionFactory, de hecho, la mayor parte de la capa inferior es inicializar nuestro objeto de configuración y crear un objeto DefaultSqlSession en la capa superior a través de este objeto de configuración construido como parámetro. Así que ahora tenemos un objeto DefaultSqlSession que contiene un objeto de configuración.

Entonces, lo que vamos a estudiar ahora es SqlSession session = sqlSessionFactory.openSession (true) qué ha hecho la capa inferior del proceso de creación de SqlSession.

Bueno, no digamos mucho, depuremos.

Continúe sumergiéndose en el método openSessionFromDataSource

 Es obvio aquí que podemos ver que lo que finalmente se nos devuelve es un objeto DefaultSqlSession, y este objeto requiere un Ejecutor ¿Qué es un Ejecutor y para qué sirve? Aquí echamos un vistazo al método newExecutor para crear Executor en profundidad.

 

Veamos este método en tres partes

parte 1

De acuerdo con el defaultExecutorType pasado para determinar qué tipo de Executor crear, si el tipo es simple, cree un SimpleExecutor, si el tipo es reutilización, cree un ReuseExecutor, y si el tipo es por lotes, cree un BatchExecutor.

parte 2

Después de crear un objeto Executor específico, verifique si la caché de segundo nivel está activada. La configuración de la caché de segundo nivel se establece en el archivo de configuración global, por lo que si está activada, la propiedad cacheEnabled de nuestro objeto de configuración es verdadera De lo contrario, es falso. Si es cierto, es decir, si la caché secundaria está activada, pasaremos el objeto Executor creado como parámetro a un constructor llamado CacheExecutor. Entonces podemos sumergirnos en CacheExecutor:

Puede encontrar que el objeto Executor entrante está asignado a la variable Executor dentro. Mire sus otros métodos, como:

Se puede encontrar que la ejecución real de la operación para interactuar con la base de datos es en realidad el objeto Executor que pasamos, lo que indica que CacheExecutor es solo otra capa de nuestro Executor encapsulado, y luego se le agregan algunos métodos de almacenamiento en caché. De hecho, esto también es Java. Se implementa el proxy estático del patrón de diseño CacheExecutor es equivalente a una clase de proxy de Executor, que agrega la función de caché. 

part3 

La sentencia ejecutor = (Ejecutor) interceptorChain.pluginAll (ejecutor) es muy importante. Nos encontraremos con este código más adelante. ¿Qué es? En realidad, esto está relacionado con nuestro mecanismo de complemento. En Mybatis, podemos personalizar el complemento. Hablaremos de esto más adelante.

Después de pasar por estas 3 partes, obtiene un objeto Executor que puede ser encapsulado por CacheExecutor y complementos. Finalmente regresa al nivel superior

Finalmente, lo que obtenemos es un objeto DefaultSqlSession que implementa la interfaz SqlSession, y el objeto contiene el objeto Configuration y el objeto Executor que pueden encapsularse.

Supongo que te gusta

Origin blog.csdn.net/weixin_37689658/article/details/99121800
Recomendado
Clasificación