1. 程式人生 > >《Java EE網際網路輕量級框架整合開發》Mybatis筆記

《Java EE網際網路輕量級框架整合開發》Mybatis筆記

1.MyBatis的核心元件

SqlSessionFactoryBuilder(構造器):它會根據配置或者程式碼來生成SqlSessionFactory,採用的是分步構建的Builder模式
SqlSessionFactory(工廠介面):依靠他來生成SqlSession,使用的是工廠模式
SqlSession(會話):一個即可以傳送SQL執行返回結果,也可以獲取Mapper的介面。在現有的技術中,一般我們會讓其在業務邏輯程式碼中消失,而使用的是MyBatis提供的SQL Mapper介面程式設計技術,他能提高程式碼的可讀性和可維護性。
SQL Mapper(對映器):MyBatis新設計存在的元件,他由一個Java介面和XML檔案(或註解)構成,需要給出對應的SQL和對映規則。他負責傳送SQL來執行,並返回結果。

SqlSessionFactory(工廠介面)

使用MyBatis首先是使用配置或者程式碼去生產SqlSessionFactory,而Mybatis提供了構造器SqlSessionFactoryBuilder,它提供了一個Configuration類作為引導,採用builder模式生成SqlSessionFactory。
SqlSessionFactory是一個介面,在Mybatis中它存在兩個實現類:SqlSessionManager和DefaultSqlSessionFactory,一般而言,具體是有DefaultSqlSessionFactory實現,而SqlsessionManager使用在多執行緒的環境中。
alt

SqlSession

SqlSession有兩個實現類,DefaultSqlSession和SqlSessionManager,前者是單執行緒使用的,後者在多執行緒環境使用,SqlSession的作用類似於一個JDBC的一個Connecttion物件,代表著一個連線資源的啟用。它的作用有3個:
1.獲取Mapper介面
2.傳送SQL給資料庫
3.控制資料庫事務

SQL Mapper(對映器)

對映器由一個介面和對應的xml檔案(或註解)組成,用於將POJO對映到資料庫。兩種對映方式寫法如下:
在這裡插入圖片描述

生命週期

SqlSessionFactoryBuilder在建立SqlSessionFactory成功後就應該被銷燬。
SqlSessionFactory可以被認為是一個數據庫連線池,所以生命週期等同於Mybatis應用週期,存在於整個Mybatis的應用中。
SqlSession相當於連線時的Connection物件,所以它只存活在一個業務請求中,當業務請求結束就會被銷燬。
Mapper的生命週期應該小於等於SqlSession的生命週期,它對應的是一個業務請求中的某一個具體請求,一旦處理完了相關業務就會被銷燬,比如一個select語句。

2.MyBatis配置

MyBatis配置檔案所有元素如下

<?xml version="1.0" encoding='UTF-8"?>
<configuration> <!--配置-->
	<properties/><!--屬性-->
        <settings/><!--設定-->
        <typeAliases/><!--型別命名-->
        <typeHandlers/><!--型別處理器-->
        <objectFactory/><!--物件工廠-->
        <plugins/><!--外掛-->
        <environments><!--配置環境-->
     		<environment><!--環境變數-->
     			<transactionManager/><!--事務管理器-->
     			<datasource/><!--資料來源-->
   		<environment/>
       <environments/>
       <databaseIdProvider/><!--資料庫廠商標識-->
       <mappers/><!--對映器-->
<configuration/>  	  
properties屬性

用於給系統配置一些執行引數,一般放在properties檔案裡,使用方法為

<properties resource="jdbc.properties"/>
settings設定

settings是MyBatis中最複雜的配置,它能影響MyBatis的底層執行,但是在大部分情況使用預設值便可以執行,大部分情況也不需要修改它。

typeAliases別名

由於類的全限定名稱很長,需要大量使用的時候不太方便,所以MyBatis允許使用一個簡寫代替這個類,這就是別名。定義別名有兩種方式:
1.根據類定義別名

<typeAliases>
	<typeAlias alias="role" type="com.learn.ssm.chapter4.pojo.Role"/>
<typeAliases/>

2.根據包定義別名

<typeAliases>
	<package name="com.learn.ssm.chapter4.pojo"/>
<typeAliases/>
typeHandler型別轉換器

typeHandler承擔的角色是jdbcType(資料庫型別)和javaType(Java型別)的相互轉換,很多情況下我們並不需要去配置jdbcType和javaType之間的相互轉換,但是對於那些需要使用自定義列舉的場景,或者資料庫使用特殊資料型別的場景,可以使用自定義的typeHandler去處理型別之間的轉換問題。自定義typeHandler需要重寫TypeHandler介面。

ObjectFactory(物件工廠)

用來建立結果集例項,預設情況使用的是DefaultObjectFactory,如果需要自定義,則需要實現ObjectFactory介面或者繼承DefaultObjectFactory,然後重寫其中的一些方法。

plugin(外掛)

對MyBatis進行擴充套件,將覆蓋MyBatis底層物件的核心方法和屬性。比如分頁外掛就是在這裡定義。

environment(執行環境)

用於配置資料庫資訊,包括TransactionManger(事務管理器)和datasource(資料來源),如果我們採用Spring對事務管理器和資料來源進行管理,這兩個的配置就可以放到Spring的配置檔案裡。

databaseIdProvider(資料庫廠商標識)

用於支援多種不同廠商的資料庫。