动力节点SSM源码分析—Mybatis—第一章 Mybatis核心源码构建

文章详细介绍了阅读MyBatis源码的注意事项,推荐的指导原则,以及源码分析方法。通过构建SqlSessionFactory和理解类加载器Classloader的角色来阐述MyBatis的核心工作流程。同时,给出了纯MyBatis代码开发的六个步骤,强调了Configuration对象的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、阅读源码注意事项

  1. 源码看第一遍基本上都会晕车的,特别是之前没有看过源码的学员;
  2. 一开始看源码晕车很正常,建议至少看3遍以上,然后可能才感觉不晕车;
  3. 看源码目的主要了解其底层实现,设计思想,拓展思维,开发时借鉴和参考;
  4. 不必把每一个细节都弄明白,当今社会追求高效,不必重复造轮子;
  5. 看源码不必有完美主义,开源代码中也有不尽人意之处;
  6. 看源码主要掌握核心底层实现及精华之处,在工作中遇到异常能快速定位;

二、指导原则

  1. 寻找入口

  2. 断点跟踪

  3. 先粗后细

  4. 精略结合

  5. 猜想验证

三、源码分析

  1. 建议先自己看一遍源码,然后再看直播或者录播视频,效果会更好;

  2. 建议看一遍第一期的Mybatis源码分析,可以把视频播放速度加到1.3-1.5-2.0倍播放,可以一天完成MyBatis所有视频的学习;

  3. 官方文档:mybatis 官方文档

  4. 源码下载:git-mybatis源码

四、源码构建

  1. 从git上clone下项目,用idea打开。
  2. 切换版本
    JDK Version: 1.8.0-321 is not in the allowed range [11,12),[17,18),[19,20),[20,21),[21,22).
  3. 编译的过程中,如果报错就把license删除。

五、类加载器Classloader

ClassLoader翻译过来就是类加载器,一般开发时其实用得不多,但对于某些框架开发来说却非常常见。具体作用就是将 class文件加载到jvm虚拟机中去,程序就可以运行了,但是jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要动态加载,如果一次性加载jar包和class,内存消耗极大;
Java语言自带有三个类加载器:
类加载器
父类加载器
Java核心类库由BootstrapClassLoader加载,由于是本地C语言实现,所以为null。

六、纯MyBatis代码开发步骤

第一步:读取mybatis-config.xml配置文件;
第二步:构建SqlSessionFactory;
第三步:打开SqlSession;
第四步:获取Mapper接口对象;
第五步:调用Mapper接口对象的方法操作数据库;

创建入口。

//第一步:读取mybatis-config.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

//第二步:构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//第三步:打开SqlSession
SqlSession session = sqlSessionFactory.openSession();

//第四步:获取Mapper接口对象
UsersMapper usersMapper = session.getMapper(UsersMapper.class);

//第五步:调用Mapper接口对象的方法操作数据库;
Users user = usersMapper.selectByPrimaryKey(1L);

//第六步:业务处理
log.info("查询结果: " + user.getId() + "--" + user.getPhone());

七、源码分析

第一步:读取mybatis-config.xml配置文件

通过Resources工具类,调用ClassLoader读取classpath下的mybatis-config.xml配置文件,得到一个输入流;

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

第二步:构建SqlSessionFactory

建议一步步断点跟踪更加清晰

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  1. 在build中调用重载的build。重载的build方法里通过传入的流创建了一个XMLConfigBuilder对象。

  2. 进入XMLConfigBuilder构造器,其中使用XPathParser类将流按照XMLMapperEntityResolver指定的本地dtd进行解析,获取到XPathParser对象,并放入XMLConfigBuilder类中。

  3. XMLConfigBuilder类中,进行了默认的别名和处理器注册。并实现了线程隔离的单例的错误信息记录ErrorContext

  4. 接下来,使用刚才获取到的XMLConfigBuilder对象进行解析。将解析出的配置对象设置到DefaultSqlSessionFactory中,并返回实力实例

  5. 具体使用了xpath的方式进行解析先从根标签开始,获取每一个标签的XNode对象,再解析出其中的属性和子节点。最后状装填到XMLConfigBuilder持有的configuration对象中去。6. 在parseConfiguration中进行了许多重要的操作,如125行通过解析mappers标签,解析并装载了mapper文件。在这里插入图片描述

至此sqlSessionFactory构建完毕。下一步,开启session。

八、总结:

  • MyBatis解析配置文件的本质就是为了获得Configuration对象。
  • Configuration 对象可以理解是mybatis的XML配置文件在程序中的化身。
  • MyBatis非常重要的一个对象,里面封装了MyBatis的整个配置信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值