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