MyBatis运行原理

       下面的是mybatis的运行原理简化版,同时后面添加一些解析用来更方便的理解其运行原理。

                                   mybatis-config.xml
                    mapper.xml   mapper.xml   mapper.xml
                                                   |
                                                   |
                                          Resources  解析完所有的配置信息包括mapper.xml
                                                   |
                                                   |--->并返回一个流inputStream
                                       SqlSessionFactoryBuilder   工厂构建者拿到 inputStream流进行处理
                                                   |
                                                   |--->并返回一个Configuration里面包含配置信息还有sql语句
                                      SqlSessionFactory
                                                    |
                                                    |--->Configuration
                                            SqlSession
                                                    |
                                                    |--->(sql语句,链接)
                                          ProxyFactory 
                                                    |
                                                    |--->
                                             Executor
                                                  |     |
                                                  |     |
                               输入参数映射  输出结果映射

首先MyBatis要想运行,首先要加载配置文件,此时要加载的配置文件叫做mybatis-config.xml,当然配置文件不只有这些,我们取名为mapper.xml,mapper.xml配置文件通过映射进入mybatis-config.xml文件中,mybatis为我们提供一个类叫做Resources,这个类就是用来加载配置文件。

                                    mybatis-config.xml
                     mapper.xml   mapper.xml   mapper.xml
                                                   |
                                                   |
                                          Resources  解析完所有的配置信息包括mapper.xml

当Resources解析完配置文件,会生成I/O流,叫做inputStream,之后会把I/O流交给一个叫做工厂构建者的类,叫做SqlSessionFactoryBuilder。

                                         Resources  解析完所有的配置信息包括mapper.xml
                                                   |
                                                   |--->并返回一个流 inputStream
                                       SqlSessionFactoryBuilder   工厂构建者拿到 inputStream流进行处理

工厂构建者顾名思义会构建一个工厂,并返回出来,但是在构建这个工厂之前先把这个I/O流进行解析,得到一个Configuration,Configuration对象里面有自己的数据源,还有映射文件的信息存在Map

MyBatis运行原理_第1张图片

                                    SqlSessionFactoryBuilder   工厂构建者拿到 inputStream流进行处理
                                                   |
                                                   |--->并返回一个Configuration,里面包含配置信息还有sql语句
                                      SqlSessionFactory  拿到Configuration后,创建对象

工厂拿到Configuration后,会在创建对象时把Configuration交给这个对象SqlSession。

                                       SqlSessionFactory
                                                    |
                                                    |--->Configuration
                                            SqlSession

当SqlSession对象拿到Configuration后会返回一个代理类(底层就是JDK的动态代理)怎么返回一个代理类呢?通过生成一个代理工厂,让代理工厂来做这个事情

                                           SqlSession
                                                    |
                                                    |--->(sql语句,链接)
                                          ProxyFactory  

代理工厂会调用项目中的一个工具类叫做Executor(执行器)

MyBatis运行原理_第2张图片这个工具类会拿着Configuration里面的信息去执行相应的sql语句。

                                         ProxyFactory 
                                                    |
                                                    |--->Configuration
                                             Executor

之后工具类会输入参数映射和输出结果映射

                                             Executor
                                                  |     |
                                                  |     |
                               输入参数映射  输出结果映射

也就得到最后的结果。

你可能感兴趣的:(mybatis,java)