Mybatis源码中的功能模块分析

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

背景

  • 记录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. 能够理解工作过程即可,出现问题,能够理解到究竟在哪个具体的环节出现问题,辅助快速解决问题。

猜你喜欢

转载自juejin.im/post/7105547865618907143