Mybatis fuente de análisis de análisis de flujo de: fase de inicialización

dirección de GitHub

Fuente resolver la dirección
https://github.com/erlieStar/mybatis-3

depurar el código fuente con el proyecto
https://github.com/erlieStar/mybatis-examples

introducción

Mybatis procesos centrales se dividen en dos etapas

  1. Fase de inicialización: archivos de configuración XML de lectura y la información de configuración en las notas, cree un objeto de configuración, y la terminación de la inicialización de cada módulo
  2. Agente etapa dinámica: Una vez finalizada la ejecución de SQL, clase proxy dinámico, asignación de parámetros, la ejecución de SQL, los resultados de los mapas

Mybatis la fase de código de inicialización es todavía muy clara, sustancialmente es a diversos atributos en el archivo de configuración es analizada, entonces el valor almacenado a objeto de configuración. Perfiles divididos en dos partes, el perfil 1.mybatis, 2.mapper archivo de asignación.

Debido a analizar el archivo de configuración es bastante compleja, por lo que mybatis con el modo de constructor, el proceso de creación de objetos y los objetos se desacopla. La figura Builder como UML

Aquí Insertar imagen Descripción
Principalmente tiene las siguientes cuatro funciones:

  1. Comportamiento de diferentes partes del objeto: Constructor (Constructor) Interfaz
  2. constructor DETALLADA (ConcreteBuilder): En general hay dos tipos de métodos, un método de construcción, tales como buildPart1 (), 2 método de construcción para la obtención de unos buenos objetos de productos, tales como el método obtenerProducto ().
  3. Director (director): llamando a un constructor específico, cree productos necesarios
  4. Los usuarios tienen que utilizar objetos complejos: Producto (Producto)

XMLConfigBuilder: main-config.xml responsable de analizar la mybatis
XMLMapperBuilder: el principal responsable de resolver el mapa fichero de configuración de caché-ref, caché, parameterMap, resultMap, sql nodo
XMLStatementBuilder: el principal responsable de analizar el archivo de configuración de asignación de seleccionar, insertar, actualizar, eliminar lo cuatro tipos de nodos

El proyecto de ejemplo de la siguiente manera

public class Part4Main {

    public static void main(String[] args) throws IOException {

        String resource = "mybatis-config4.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 这一句执行完后,Mybatis环境就初始化完了
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = null;
        try {
            sqlSession = sqlSessionFactory.openSession(true);
            AuthorMapper authorMapper = sqlSession.getMapper(AuthorMapper.class);
            List<Author> authorList = authorMapper.selectAuthortList();
            authorList.forEach(item -> {
                System.out.println(item);
            });
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

Cuando se empieza a mirar el código fuente de una línea a ver, a ver el retorno final SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

Varios análisis gobierna No me describe en detalle, en contra de sus propios archivos de configuración de depuración cuantas veces lo sabrá. Un diagrama de tiempos del proceso de resolución es el siguiente
Aquí Insertar imagen Descripción

Persecución encontró última SqlSessionFactory volvió a DefaultSqlSessionFactory

  public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

Se puede ver el último analizado mediante la generación de un objeto de configuración, que se utiliza para almacenar diversas propiedades, y se puso a DefaultSqlSessionFactory, el objeto de configuración para ver lo que al final mantenido las cosas

  public DefaultSqlSessionFactory(Configuration configuration) {
    this.configuration = configuration;
  }

Algunos pueden estar dispuestos en un booleano <configuración> nodo, se correlaciona directamente con atributos de los objetos de configuración puede mirar a la página oficial de la función de cada atributo

protected boolean safeRowBoundsEnabled;
protected boolean safeResultHandlerEnabled = true;
protected boolean mapUnderscoreToCamelCase;
protected boolean aggressiveLazyLoading;

Dijo que algunos de los atributos más importantes mappedStatements

protected final MapperRegistry mapperRegistry = new MapperRegistry(this);

Aquí Insertar imagen Descripción
Inicializado ha generado una fábrica dinámica clase de proxy para cada interfaz, esta clase se utilizará en el tiempo de seguimiento de los proxies dinámicos

protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection");

Mapeo del archivo de configuración del nodo SQL se analiza en objetos MappedStatement, que las sentencias SQL se analizan en objetos SqlSource

Aquí Insertar imagen Descripción

Puedo ver un SQL poner 2 horas, nombres claves y métodos de interfaz está plenamente cualificado método de nombre + para poner un nombre a.

Algunos sencilla SQL tiempo de inicialización, se ha resuelto StaticSqlSource (puede contener? El texto sql), de manera que cuando se ejecuta siempre que los parámetros correspondientes será capaz de reemplazar lo que la ejecución

<delete id="deleteById" parameterType="int">
    delete from book where id = #{id}
</delete>

Aquí Insertar imagen Descripción
Uso este ejemplo para correr detrás del proceso de proxy, no seleccione un nodo con el fin de que pueda entender rápidamente todo el proceso, y seleccionar el código de mapeo de los ganglios es bastante complejo

Mientras que algunos otros complejos de SQL no es así, siga Añadiré

el blog de referencia

[1] https://www.jianshu.com/p/7bc6d3b7fb45

atención de bienvenida

Aquí Insertar imagen Descripción

Publicados 385 artículos originales · ganado elogios 1471 · Vistas de 900.000 +

Supongo que te gusta

Origin blog.csdn.net/zzti_erlie/article/details/104416601
Recomendado
Clasificación