目的java
MyBatis是一個基於Java的持久層框架。也是不少程序員的最愛,由於本身控制的SQL時,寫出一個好的SQL會大大的提升總體程序的性能。目前的項目通常都是MyBatis和Spring的整合,那麼具體的邏輯是什麼樣子呢?下面就來分析一下具體的代碼及邏輯。程序員
分析spring
1 Spring的XML配置(樣例):sql
對於上面XML的配置信息,也就是Spring對一個類進行了實例化。那咱們就來看看SqlSeesionFactoryBean類到底作了什麼操做呢?
數據庫
2 SqlSeesionFactoryBean屬性:mybatis
/** 日誌類 */ private final Log logger = LogFactory.getLog(getClass()); /** mybatis的全局配置信息 */ private Resource configLocation; /** mybatis的SQL文件信息 */ private Resource[] mapperLocations; /** 數據源 */ private DataSource dataSource; /** 事務工廠 */ private TransactionFactory transactionFactory; /** spring配置文件中mybatis的屬性 */ private Properties configurationProperties; /** SqlSessionFactoryBuilder */ private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); /** mybatis的SqlSessionFactory工廠 */ private SqlSessionFactory sqlSessionFactory; private String environment = SqlSessionFactoryBean.class.getSimpleName(); private boolean failFast; /** spring配置文件中mybatis的攔截器 */ private Interceptor[] plugins; /** spring配置文件中mybatis的自定義類型集合 */ private TypeHandler<?>[] typeHandlers; /** spring配置文件中mybatis的自定義類型包 */ private String typeHandlersPackage; /** spring配置文件中mybatis的別名集合 */ private Class<?>[] typeAliases; /** spring配置文件中mybatis的別名包 */ private String typeAliasesPackage; /** 數據庫產品名 */ private DatabaseIdProvider databaseIdProvider = new DefaultDatabaseIdProvider();
3 實現接口InitializingBean:app
圖中因爲 實現了InitializingBean類,也就是須要執行初始化代碼。框架
這裏數據源與SqlSessionFactoryBuilder不能爲空,而後去構建SqlSessionFactory 。
ide
4 代碼實現:性能
4.1 生成一個MyBatis的全局對象Configuration(全局配置類)。
4.2 讀取typeAliasesPackage屬性並解析,放入Configuration(全局配置類)中,對應TypeAliasRegistry類。
4.3 讀取typeAliases屬性並解析,放入Configuration(全局配置類)中,對應TypeAliasRegistry類。
4.4 讀取plugins屬性並解析,放入Configuration(全局配置類)中,對應InterceptorChain類。
4.5 讀取typeHandlersPackage屬性並解析,放入Configuration(全局配置類)中,對應TypeHandlerRegistry類。
4.6 讀取typeHandlers屬性並解析,放入Configuration(全局配置類)中,對應TypeHandlerRegistry類。
4.7 解析MyBatis的全局配置文件,放入Configuration(全局配置類),建立Spring事務。
4.8 從新生成環境信息,設置數據庫產品名稱。
4.9 解析MyBatis的SQL文件,放入Configuration(全局配置類)。
10:最後生成一個SqlSessionFactory對象。
總結:
注意必定要區分,何時讀取Spring配置文件,何時讀取MyBatis配置文件。
具體MyBatis的操做只能一步一步的去研究。