Mybatis源码中的功能模块分析

背景
  • 记录mybatis3的功能模块,辅助理解mybatis是怎么工作的。
过程
  • 源码模块展示
    在这里插入图片描述
  1. annotations
    注解,比如常用的@Select, @Insert,@Update,@Delete还有其他很多。用法就是利用反射的知识,拿到类的元信息,然后按照定义的规则,一步一步解析出来。
  2. binding(非常重要的模块) 为mapper接口生成对应的mapper代理类,并能够通过statementId获取到
    在这里插入图片描述
    每个mapper文件都有一个对应的mapper代理类。MapperProxyFactory生产Mapper接口文件对应的MapperProxy并当成配置信息的一部分,放到MapperRegistry中,方便后续通过statementId从容器获取,这里的statementId其实是mapper.xml文件的命名空间+id(方法名称)
    其中,MapperMethod中的execute方法非常核心,所有执行sql的上层入口。
  3. builder
    在这里插入图片描述
    把xml文件内容进行构建。 一个一个地把xml文件中的节点读取到,并构建成java bean,方便直接哦通过get方法获取。
  4. cache 缓存,mybatis缓存都是存放到map容器中,这个模块就提供缓存key的计算过程。
  5. cursor 游标,指针。查询关系型数据库的一种方式。
  6. datasource, 数据库源,池化的数据源和非池化的数据源。就只是包含一些基础信息,username,password,url,driver等基础信息。
  7. exeception, mybatis的异常处理类。
  8. executor, 非常核心的功能
    在这里插入图片描述
    sql执行器。与数据库交互的statement, 执行之前的参数准备,执行之后的结果集处理。
  9. io, 资源功能模块,读取文件
  10. jdbc, 基本操作数据库的,用作测试,实际其他核心源码并没有用到这个包下面的类。
    在这里插入图片描述
  11. logging, 日志模块
  12. mapping, 非常核心模块
    在这里插入图片描述
    MappedStatement是非常重要的类。包含了很多元数据信息。mapper接口和mapper.xml文件会生成一个实例MappedStatement
  13. parsing, XPathParser, XNode, 提供解析xml配置文件的基础类。
  14. plugin, 扩展mybatis的功能。比如分页查询就是利用mybatis的插件工作原理。
  15. reflection, 在jdk的基础上丰富了反射功能
  16. scripting, 会处理xml文件中的,sql中的标签
    在这里插入图片描述
  17. session, 核心功能包。
    在这里插入图片描述
    SqlSessionFactoryBuilder构建一个个SqlSessionFactory, 然后由SqlSessionFactory实例构建一个个SqlSession实例。最后由sqlSession实例跟关系型数据库进行交互。
  18. transaction, 关系型数据库事务管理。一般使用过程中都是交给spring进行事务管理的。
    在这里插入图片描述
    事务操作。提交。回滚。
  19. type
    在这里插入图片描述
    在跟关系型数据库交互的时候,参数设置,是怎样把java type转换为jdbc type
    当执行完成sql后,拿到关系型数据库的结果集的时候,又是怎样把jdbc type转换为java type
小结
  1. 通过阅读mybatis源码,理解其工作工程后,通过记录加深自己对mybaits的熟悉和理解。
  2. 通过上面记录的功能模块,就能够把mybatis的工作过程进行串联起来。
  3. 能够理解工作过程即可,出现问题,能够理解到究竟在哪个具体的环节出现问题,辅助快速解决问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值