MyBatis的DAO接口跟XML文件里面的SQL是如何建立关系的?

     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内容,执行即可

猜你喜欢

转载自www.cnblogs.com/zhengcao/p/12152766.html