• Mybatis框架介绍
    Mybatis是Apache下的一个开源项目,一个持久层框架,支持定制的sql语句,存储过程和高级映射,Mybatis可以使用xml或是注解来配置和映射对象信息,能将java中的pojo映射成数据库中的表记录,是一个半自动的orm框架,本质上也是对jdbc的封装,使用Mybatis重点需要程序员编写sql语句,

  • Mybatis中的核心API
    SqlSessionFactoryBuilder :这个类的作用是使用构建者模式创建 SqlSessionFactory接口对象的,
    SqlSessionFactory : 可以被认为是一个数据库连接池,作用是创建SqlSession接口对象,
    SqlSession: 连接数据库对象,在一个事务内执行多条sql,通过commit,rollback方法提交事务,
    Mapper: 映射器 由一个持久层接口和xml或是注解组成,给出对应的SQL和映射规则,负责发送SQL和执行接收结果映射对象数据,

  • Mybatis流程图

  • 源码分析:

  • Configuration.xml :是Mybatis框架中的全局配置文件,名字是任意的,根节点是configuration标签,
    配置文件中的标签设置如下:
    1 Properties属性标签: 用来读取Properties文件的内容,一般是将连接数据库的数据源放到properties中,这样xml可以加载到这个文件。
    2 Settings 属性标签: 是全局配置参数,会影响mybatis框架的运行行为,列如:开启二级缓冲,开启延迟加载,
    3 TypeAliases 属性标签:类型别名, 给一个类起别名只作用于xml中,
    4 Plugin 插件,可以配置第三方插件,
    5 Environments 配置环境对象集合的,mybatis框架中可以配置多种环境,环境指的是用什么方式来连接数据库,
    注意每一个数据库对应一个SqlSessionFactory实例,
    6 Environment 环境具体对象:
    7 TransactionManager 事务管理,mybatis中有两种事务管理器类型,JDBC 是支持事务, Manager 放弃事务,
    8 DataSource 配置数据源的连接方式,type配置连接方式 Unpooled 直连一次性, Pooled 池连有缓存,jndi 方式连接
    9 Mappers映射器用来指定映射配置文件的位置,具体方式如下:

  • Mapper.xml
    mapper.xml是映射配置文件定义操作数据库的sql语句,每条sql都是一个statement,映射文件是mybatis操作数据库的核心,与mapper层的接口进行绑定,实现自动化配置,
    1 ReslultMap属性标签: 使用这个标签来完成高级结果映射,主要完成查询结果集和pojo的映射处理,属性名和列名不一样的情况下才会使用
    2 Cache : 主要是用来开启缓存;
    3 Select:查询语句 ,
    4 Insert :添加语句 ,
    5 Update:更新语句 ,
    6 Delete:删除语句
    7 sql: 复用语句块,
    注意除了可以用配置文件来映射,还可以使用注解的方式来映射到接口中,

  • Resources
    Resources是一个工具类,这个工具类就是用来加载配置文件的,

  • SqlsessionFactoryBuilder 工具类
    作用:该类是与数据库进行会话的构建类,
    mybatis框架第一步要调用XMLConfigBuilder类来配置解析xml配置文件,解析之后创建配置文件对象Configuration,之后这个配置对象作为参数被SqlSessionFaction(对象)来运行,

  • XMLConfigBuilder 工具类
    该类作用就是用来解析xml配置文件的,之后才能构建Configuration对象实例,

  • Configuration对象
    该对象是Mybatis的上下文对象,是全局配置对象,用来保存整个框架的配置信息,

  • DefaultSqlSessionFaction对象
    sqlsessionFactory是会话工厂,DefaultSqlsessFactory是实现类,这类是全局的,是一个单例模式,
    通过调用openSession()方法来创建会话对象

  • Executor 执行器对象
    有了sqlsession对象就是与数据库进行连接,但是真正的操作是在Executor执行器中完成,注意Exccutor对象与sqlsession对象绑定在一起的,

  • StatementHandler对象
    Executor执行器对象调用这个对象中的execute()方法来执行操作sql,

  • ResultSetHandler对象
    结果集处理器对象,作用就是对结果处理进行pojo映射,

  • 最后总结一下Mybatis框架中的流程
    首先要创建好一个mybatis.xml配置文件,
    启动mybatis框架是靠SqlsessionFactoryBuilder工具类 来创建Configuration对象和SqlsessionFactory对象,
    先说Configuration对象,是通过XMLConfigBuilder类来读取获取xml配置文件,然后赋值给Configuration对象
    再说SqlsessionFctory对象被创建后通过openSession()方法来创建sqlsession对象,
    有了Sqlsession对象就是与数据库进行了连接,
    Sqlsession里面是调用Executor执行器来完成sql执行
    通过StatementHandler对象中的execute方法开始执行sql,
    ResultSetHandler对象是处理映射结果集给pojo对象,

Mybatis框架底层源码分析相关推荐

  1. 【mybatis源码】 mybatis底层源码分析

    [mybatis源码] mybatis底层源码分析 1.测试用例 2.开撸源码 2.1 SqlSessionFactory对象的创建与获取 2.2 获取SqlSession对象 2.3 获取接口的代理 ...

  2. 视频教程-Spring底层源码分析-Java

    Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...

  3. Thinkphp底层源码分析

    Thinkphp底层源码分析第一章 首先我们学习此章节的内容大家可能需要有一些基础才行,接着对PHP内置字符窜数组相关函数会用的比较多一点,当然不太熟悉的朋友,其实可以借助手册看下去.下面我们开始正题 ...

  4. Apollo 2.0 框架及源码分析(一) | 软硬件框架

    原文地址:https://zhuanlan.zhihu.com/p/33059132 前言 如引言中介绍的,这篇软硬件框架多为现有消息的整合加一些个人的想法.关于 Apollo 介绍的文章已经有许多, ...

  5. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  6. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  7. 集合底层源码分析之HashMap《上》(三)

    集合底层源码分析之HashMap<上>(三) 前言 源码分析 HashMap主要属性及构造方法分析 tableSizeFor()方法源码分析 Node类源码分析 TreeNode类源码分析 ...

  8. 视频教程-RPC服务框架(Dubbo)源码分析-Java

    RPC服务框架(Dubbo)源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大 ...

  9. Jaca集合(四)Vector集合底层源码分析

    Vector的基本介绍: (1)Vector类的定义说明:我们进入源码界面进行查看: public class Vector<E>extends AbstractList<E> ...

  10. ArrayList底层源码分析

    声明:本文为作者原创,请勿装载,如过转载,请注明转载地址 文章目录 ArrayList底层源码分析 1. 继承Serializable接口 2. 继承Cloneable接口 2.1 浅拷贝 2.2 深 ...

最新文章

  1. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析
  2. 应用软件(E-MAIL-FTP-WEB)
  3. koa+mysql+vue+socket.io全栈开发之web api篇
  4. Quartz总结(一):Quartz集成Spring的2个方法
  5. 算法设计与分析 0-1背包问题 动态规划解法【超详细】
  6. python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)
  7. 唤醒计算机运行此任务_如何停止Windows 8唤醒计算机以运行维护
  8. 使用Hadoop自带的例子wordcount实现词频统计
  9. 你的数据可也可以发三篇NAR的文章
  10. java二级分销排行统计_直播分销系统排行
  11. 获取两个时间之间的间隔_花了两天,终于把 Python 的时间转化给整明白了(超多图解)...
  12. SCCM2007系列教程之十操作系统部署(三)
  13. Python-UDP编程
  14. Unity 制作虚拟手柄例子
  15. 惠普打印机136w硒鼓芯片怎么清零_HP惠普打印机清零技巧
  16. 计算机学frm,FRM金融计算器使用教程
  17. 论文阅读_无监督知识图对齐PRASE
  18. 【EmailCamel 国外邮件营销、美国邮件群发】邮件到达收件箱系列文章05:免费公共邮箱作为发件人的限制
  19. Vin码采集,Vin码录入
  20. 【WiFi破解】WiFi密码不知道了怎么办,一行代码轻松破解

热门文章

  1. SQL Server 2016新特性: 对JSON的支持
  2. linux服务器MySQL数据从磁盘拷贝以及恢复
  3. C++笔记------数据类型
  4. OneNET麒麟座应用开发之五:获取加速度传感器ADXL345数据
  5. Codeforces Beta Round #1 B. Spreadsheets 模拟
  6. linux sshd 开机自启动
  7. kindeditor在Firefoxt 和 Chrome 下不能取到值的解决方法
  8. Classic Poems ----Tagore, Stray birds
  9. 修改手机屏幕刷新率_今年买手机绕不开高刷新率屏幕,144Hz比120Hz更好吗?
  10. 拓端tecdat|数据下的隐形眼镜初体验