MyBatis的应用都是以一个SqlSessionFactory的实例为中心的,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder来获得。
但SqlSessionFactory是一个接口,它的里面其实就有两个方法:OpenSession、getConfiguration;其中,Opensession方法就是为了获取一个SqlSession对象
,完成必要数据库的增删改查功能,但是SqlsessionFactory属性太少了,所以需要getConfiguration的配合;来配置mapper映射文件、SQL参数、返回值类型、缓存等属性。
MyBatis在初始化SqlSessionFactoryBean的时候,找到配置需要扫描的基本包路径,去解析里面所有的XML。重点就在如下两个地方:
1、创建SqlSource
Mybatis会把每个SQL标签封装成SqlSource对象。然后根据SQL语句的不同,分为动态SQL和静态SQL。其中静态SQL包含一段String类型的SQL语句;而动态SQL 由一个SqlNode组成
2、创建MapperedStatement
XML中的每一个SQL标签就对应一个MapperedStatement对象,这里有两个属性很重要
Id 全限定类名+方法组成的ID。
sqlSource 当前SQL标签对应的SqlSource对象。创建完MapperedStatement对象,会将它缓存到Configuration#MapperedStatement中。
由图所示,当我们执行MyBatis方法的时候 就通过 全限定类名+方法名 找到MapperedStatement 对象,然后执行里面的sql内容,执行即可