mybatis plus源碼解析(一) ---基於springboot配置加載和SqlSessionFactory的構造

一直想分析下框架的代碼,以前也看過Spring等框架源碼,可是看了似懂非懂的,此次要將分析的記錄下,若是發現不理解能夠再來從新看下這個記錄,仍是從簡單mybatis-plus來分析下,爲何mybatis-plus?最近項目在使用這個。mybatis-plus在mybatis上作了一層擴展,詳細瞭解請訪問官網地址:mybatis-plus 項目依賴工具是maven, 引入的項目依賴以下:java

<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.1.9</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatisplus-spring-boot-starter</artifactId>
        <version>1.0.5</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>
接下看一下spring boot加載的mybatis-plus的配置和
複製代碼

上圖能夠看出mybatisplus-spring-boot-starter這個依賴中spring.factories文件中,spring boot的EnableAutoConfiguration加載的MybatisPlusAutoConfiguration這個類,若是不熟悉spring boot starter的使用的能夠參考的 這裏 接下來能夠看下MybatisPlusAutoConfiguration裏是若是初始化配置的。

從註解的角度看

  • @Configuration是將該類加入spring容器當中,
  • @ConditionalOnClass({SqlSessionFactory.class, MybatisSqlSessionFactoryBean.class})
  • SqlSessionFactory,MybatisSqlSessionFactoryBean類的的依賴存在。
  • @ConditionalOnBean(DataSource.class) DataSource這個實例必須存在
  • @EnableConfigurationProperties(MybatisPlusProperties.class) 加載配置到MybatisPlusProperties這個類中
  • @AutoConfigureAfter(DataSourceAutoConfiguration.class) 其餘的類加載完以後,再加載DataSourceAutoConfiguration這個類,它主要是完成數據配置初始化。 接下來,看一下 SqlSessionFactory的構造,

@ConditionalOnMissingBean是在Spring容器中缺乏bean的時候,建立SqlSessionFactory這個對象,前面已經建立了DataSource這個對象,這個實例在 這個方法中會自動注入進來,這是Spring的IOC來完成的, 這個類中,會建立一個MybatisSqlSessionFactoryBean的實例,它是實現Spring中FactoryBean接口的類,而後在這個實例中設置DataSource,VFS,ConfigLocation,MybatisConfiguraition(它是繼承與Mybatis的Configuration)等屬性mysql

SqlSessionFactory的建立的下半部分,能夠看出,都是給MybatisSqlSessionFactoryBean設置各類屬性,最後一句是最重要的是,調用MybatisSqlSessionFactoryBean的getObject()的方法.

能夠看到getObject獲取SqlSessionFacoty,會調用afterPropertiesSet()


afterPropertiesSet緊接着會調用 buildSqlSessionFactory()方法
。 能夠從圖上看出,若是是在configLocation的路徑存在,則加載自定義的batisConfigBuilder對象,採用springboot的配置加載,因此這裏configcation不存在的,因此只會走第一個分支,將配置屬性都設置到configurion這個對象中。

那麼接下來的一段代碼就是爲掃描配置的實體的路徑,以及註冊別名了,
這注意一下,若是mybatis中想爲實體定義別名,則能夠在實體上加上@Alias("xx")註解來標註,若是不加,則默認是英文全小寫來標識別名。

接下來就是註冊插件和類型轉化處理了。

接下來是設置事務管理器,這裏能夠看到默認是用SpringManageTransactionFactory,而後設置全局配置,以及利SqlSessionFactoryBuilder傳入configuration建立一個DefaultSqlSessionFactory對象,它建立的DefaultSqlSession再注入到SqlSessionTemplate對象中,SqlSessionTemplate纔是真正與數據庫交互的類,

接下最重要的是掃描加載mapper映射的xml,解析的工做是由XMLMapperBuilder的parse()方法完成的.具體即系,你們感興趣能夠本身去看下。不過回去介紹它是怎麼使用註解寫sql的,畢竟如今註解比較流行點吧,可是在憑藉sql方面仍是要弱於xml的,

到了這裏,彷佛忘了,mapper的掃描和註冊到configuration的過程,因爲建立SqlSessionFactory的過程太長,因此仍是留在下一篇介紹吧。

總結: 今天主要介紹了基於springboot加載mybatis-plus的配置和SqlsessionFactory的構造,初次寫源碼級別的分析,寫得很差,若是發現理解上的錯誤,但願你們多指教,謝謝!spring

相關文章
相關標籤/搜索