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。

     

  • 相关阅读:
    通过URL地址将图片保存到本地
    Sql批量提交方法
    MySql 批量提交方法
    【Sqlserver】查看所有数据库的大小 创建日期 名称 版本级别 状态
    【asp.net】滑块验证码(分享一个从github上下载的源码)
    【winform】 WeifenLuo.WinFormsUI.Docking.dll 组件学习
    【C#】初次使用webapi的体会
    【C#】 封装的异步HttpRequest
    Android实现双时间选择器
    Android的金额3位数加逗号分隔
  • 原文地址:https://www.cnblogs.com/magic-sea/p/11192126.html
Copyright © 2011-2022 走看看