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<namespace+id,MappedStatement(sql,resultType)>中

数据源

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

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

                                       SqlSessionFactory
                                                    |
                                                    |--->Configuration
                                            SqlSession

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

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

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

这个工具类会拿着Configuration里面的信息去执行相应的sql语句。

                                         ProxyFactory 
                                                    |
                                                    |--->Configuration
                                             Executor

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

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

也就得到最后的结果。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值