您的位置: 首页 > 文章 > MyBatis源码分析 -- mapper的解析流程 MyBatis源码分析 -- mapper的解析流程 分类: 文章 • 2023-11-16 10:14:22 0.准备一个核心配置文件 和 一个mapper文件 1.准备好mybatis的基本环境之后,运行下面的单元测试 2.进入SqlSessionFactoryBuilder().build方法 3.创建 XMLConfigBuilder ,用于解析mabatis的核心配置文件,进入parse(),然后parseConfiguration(),里面为解析xml对应的信息 4. 我们重点来看看mapper节点的解析,这里循环一个个解析mapper文件 5.进入parse()方法,开始解析mapper文件。先判断是否已经解析过 6.进入configurationElement(),看如何解析mapper文件的。 7.重点来看看如何解析sql的。创建 XMLStatementBuilder 对象,用于接续sql语句 8.获取节点上的信息 9.进入 langDriver.createSqlSource ,看如何解析sql的。把sql语句交给 XMLScriptBuilder对象,进入builder.parseScriptNode() , 这时,看见两个熟悉的符号,“#{”和“}” 10.进入 parser.parse(originalSql) 开始解析,传入原始sql 解析{}里面的内容,hander对象是上一步new的对象, 11.SqlSourceBuilder解析{}里面的内容 解析出来了之后放ParameterExpression ,他继承了hashmap 11.最后得到结果,完了返回一个“?” sql解析完了。参数拿到了,sql的参数被替换成了? 12.解析完了之后,拿到namespace + 标签id 作为key,放入 configuration 里面的 mappedStatements 容器中。 13. 至此,一个mapper文件里面的节点就解析完毕了。循环里面将继续解析其他的mapper文件 14. mapper文件里面的东西解析完了之后开始注册mapper接口 15 调用 configuration.addMapper(boundType) ,然后 mapperRegistry.addMapper(type) ,将mapper接口的工厂类添加到mapper注册中心。注:是工厂,不是实现类。实现类是调用的反射的。 16.处理失败的节点 17.至此,一个mapper文件就全部解析完毕,循环继续解析其他的mapper文件 18.mapper解析完了之后,SqlSessionFactory 也得到了 19.回到梦开始的地方了。 20.下回继续分解。