zoukankan      html  css  js  c++  java
  • MyBatis源码分析(二):MyBatis整体架构及原理

    一、Mybatis整体架构导图

    二、Mybatis的核心组成

    SqlSessionFactoryBuilder(构造器):

    根据配置信息(XML)生成SqlSessionFactory工厂接口,构造器使用了org.apache.ibatis.builder.xml包下的XMLConfigBuilder对Mybatis-config配置文件解析,该XML解析类使用了org.apache.ibatis.parsing解析包下的工具解析XML各个节点的信息,构建Configuration,再用Configuration创建SqlSessionFactory,然后SqlSessionFactoryBuilder生命周期结束。其中,默认生成的是DefaultSqlSessionFactory。

     

    SqlSessionFactory(工厂接口):

    依靠工厂来生成SqlSession会话接口,生命周期贯穿整个应用,重复创建工厂接口会消耗更多数据库连接资源。

     

    SqlSession(会话接口):

    发送SQL去执行并返回结果,还能获取Mapper的接口,生命周期存在于请求数据库处理事务中,结束后要关闭,线程不安全。它里面主要有四大对象:

    1. Executor 执行器:SIMPLE、REUSER、BATCH
    2. StatementHandler 数据库会话器:SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler,通过RoutingStatementHandler的适配器模式穿建不同的StatementHandler对象
    3. ParameterHandler SQL参数处理器:对预编译的SQL语句进行参数设置,完成预编译参数的设置,从parameterObject对象中取得参数,然后同TypeHandler进行参数处理
    4. ResultHandler 结果处理器:组装结果集来返回的,里面有处理存储过程输出参数的方法,还有包装结果集的方法,默认情况下用DefaultResultSetHandler类,这个接口的实现有点复杂,涉及到JAVASSIST或者CGLIB作为延迟加载,然后用TypeHandler和ObjectFactory进行结果组装结果再返回

    SqlSession内部运行图:

     

    SQL Mapper(Java接口+XML文件 或者 Java接口+Java注解):

    有对应的SQL和映射规则,负责发送SQL执行,并返回结果。映射器的内部由3部分组成:

    MappedStatement,保存映射的一个节点<select|insert|delete|update>,包括配置的SQL,SQL的id、缓存信息、resultMap、parameterType、resultType、languageDriver等配置内容;

    SqlSource,提供SqlBound对象,是MappedStatement的一个属性;

    SqlBound,建立SQL和参数的地方,有3个常用属性,sql、parameterObject,parameterMappings。

     

  • 相关阅读:
    函数式编程之moand的作用
    函数式编程之构建--待完成
    函数式编程中的组合子
    函数式编程中的函数—函数式编程的多态
    swift函数式编程之compose
    swift的柯里化demo
    trait Monad:函数式编程类型系统本博客搜索关键字--类型升降
    函数式编程的三个核心问题:计算的构建、求值、关系
    金融危机是现有金融体制的重构和资产价格的重估
    代理模式:稳定的代理,可变的实现(替换)
  • 原文地址:https://www.cnblogs.com/magic-sea/p/11192126.html
Copyright © 2011-2022 走看看