目录
运行步骤
1.获取sqlSessionFactory
2.获取sqlSession
3.获取接口的代理对象
4.执行增删改查方法
emmm,内容有点多,分成四节了。
获取sqlSessionFactory
首先通过InputStream读取mybatis全局配置文件,通过SqlSessionFactoryBuilder创建SqlSessionFactory。
进入build方法,通过XmlConfigBuilder解析InputStream配置,通过parse方法将配置文件解析。
解析全局配置文件
进入parse方法,它将你的全局配置文件中的各节点标签的配置解析,最终将所有配置信息存入Configuration对象中。
![](https://i-blog.csdnimg.cn/blog_migrate/00c0898cd02361dc553989777f8d1209.png)
解析mapper映射文件
此时我们还会有疑问:这是把mybatis全局配置文件解析了,那么mapper文件在哪解析的?我们进入this.mapperElement(root.evalNode("mappers"))这个方法中查看一下:根据引入方式找到你的mapper映射文件。
我们进入parse()方法,看它如何解析mapper文件的?
查看configurationElement()方法,获取了映射文件的namespace等等。我们以最后的select|insert|update|delete为例,再进入查看一下:
进入该方法:mybatis又搞了一个statement的解析器,用来解析映射文件中的sql标签。我们再进入parseStatementNode()方法中。
mybatis对sql标签增删改查中的每一个标签的所有属性进行了获取。方法最后它将所有属性值封装到了MappedStatement;一个mappedStatement就代表一个增删改查标签。
这个就是MappedStatement中部分属性。我们甚至还能在这个MappedStatement的属性中找到SQl语句。
Configuration
所有都解析完成,所有配置文件的信息都会封装到Configuration中。包括全局配置文件和所有SQL映射文件。
从这个Configuration中可以找到mappedStatement。甚至还能看见每个mapper对应的代理。
最后,我们在进入SqlSessionFactoryBuilder中的build方法中,可以看出它会返回一个包含Configuration的DefaultSqlSessionFactory。