想必经过前面两章的回忆,你已经很清楚了Mybatis和jdbc的用法,下面我们正式进入到Mybatis的源码解析中。
在阅读源码之前,有必要说一下Mybatis的整体运行逻辑,脑中有了一个大概的流程,才不容易迷失在源码的海洋中。
我们把main入口处的代码分为两个部分
- 解析xml的配置文件构建SqlSession对象,
- 执行SQL
从代码上看似乎就这么简单,但其实内部会比这个要复杂一点,完整的步骤应该是这样的
-
加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个
MappedStatement
对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),然后把这个对象作为value
,把mapper
的namespace+对应节点的id
作为key保存到Configuration
的mappedStatements
属性中,这是个map对象。 -
SQL解析:当API接口层接收到调用请求时,会接收到传入
SQL
的ID
和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis
会根据SQL
的ID
找到对应的MappedStatement
,然后根据传入参数对象对MappedStatement
进行解析,解析后可以得到最终要执行的SQL
语句和参数。 -
SQL执行:将最终得到的
SQ
L和参数使用JDBC
的方式执行,得到操作数据库的结果。 -
结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成
HashMap、JavaBean
或者基本数据类型,并将最终结果返回。
那么在下一章中,我们来说说,Mybatis是如何解析配置文件的。