下面的是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
| |
| |
输入参数映射 输出结果映射
也就得到最后的结果。