MyBatis架构

首先MyBatis大致上可以分为四层:

1.接口层:这个比较容易理解,就是指MyBatis暴露给我们的各种方法,配置,可以理解为你import进来的各种类。,告诉用户你可以干什么

2.数据处理层:顾名思义对数据的处理,当接收到一个sql语句时,比如 selecr *from person where id=#{id};  会进行这四步:参数处理---sql解析---sql执行----处理结果,这里我们重点关心sql的执行

3.框架支撑层:一些辅助操作,缓存机制,事务管理,连接池等,

4.引导层:有了上面三层之后,告诉用户到底是通过哪一种方式来执行mybatis,即sql语句的执行方式,xml配置,注释配置等

源码分析:

从MyBatis的执行步骤入手,首先看下面代码:

      Reader reader = Resources.getResourceAsReader("config.xml");
//connection
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sessionFactory.openSession(true);
/* 获取到mapper对象 */
PersonMapping personMapping = sqlSession.getMapper(PersonMapping.class);
     personMapping.selectPersonById(2);

以上代码分为四步:

1.获取到SqlSessionFactory对象,

2.获取到Sqlsession对象,

3..获取到具体某一个Mapper对象,mapper在这里就是一个代码,用来代码接口之中的crud方法

4.执行具体的<select>之中定义的sql语句

前两两步感觉没什么必要记录了,直接看三,四步:
通过debug得到,当我们执行查询语句时,会跳转到MapperProxy对象当中的invoke方法,这个对象实现了jdk的动态代理接口InvocationHandler,用到了动态代理的模式,之后有了这个动态代理对象MapperPorxy,我们的crud就是通过这个代理对象来执行,所以我们才把获取到的对象叫做代理对象。如下就是这个MapperPorxy对象:

我刚分析了一下,我觉得每一步都能看懂,整合起来就不懂了,感觉看的也很枯燥,没意思,说的是学习一下别人的这种设计模式,设计思想,但是我感觉我现阶段根本没有这个功底。

最新文章

  1. 【004: gcc 和 clang 的简单比较】
  2. winfrom调用FastReport模板
  3. AutoMapper的简单使用
  4. [CentOs]ip操作
  5. 配置RAC到单节点standby的data guard
  6. dp,px转换
  7. asp.net MVC URL路由入门指南
  8. 3DMAX-模型制作简介
  9. skiing(搜索+记忆化搜索)
  10. 键盘皇者 RealForce 104Pro独家评测
  11. 交叉编译 tesseract
  12. 【BZOJ2095】 Bridge
  13. android 实现淘宝收益图的折线
  14. Oh-My-Zsh及主题、插件安装与配置
  15. 面试题_默认传参list
  16. ubuntu16.04 离线安装docker ce
  17. Jmeter测试demo
  18. 网络编程基础【day09】:解决socket粘包之大数据(七)
  19. 什么是ASCII
  20. day23-python操作数据库三

热门文章

  1. linux下安装cmake方法(2)---直接用命令安装
  2. 为QLabel增加Clicked信号
  3. mqtt实现跨平台跨应用通讯
  4. GDAL集成GEOS
  5. 弹性碰撞 poj 3684
  6. 成功填坑! Java引入QQ登录时,AccessToken [accessToken=, expireIn=];
  7. SBT与Play配置文件
  8. django 调试工具 django-tool-bar
  9. crontab里的特殊符号%导致命令不能执行
  10. dp——洛谷 P1541 乌龟棋 —— by hyl天梦