如何自己建設(shè)電影網(wǎng)站制作網(wǎng)站需要什么
1、為什么會(huì)看原理書(shū)籍
????????Mybatis是我們Java后端開(kāi)發(fā)中的主流ORM框架,基本都會(huì)在工作中用到。所以,是既熟悉,又陌生。熟悉是因?yàn)橐恢倍荚谑褂?#xff0c;而陌生則是對(duì)于其內(nèi)部原理還不夠深入。剛好近期的工作中,又遇到了一個(gè)需求,需要利用mybatis框架做一些輸出任務(wù),因此正好看一看,進(jìn)一步了解一下其根本,好做出相應(yīng)的對(duì)策。
2、學(xué)習(xí)之后的一些感受
首先,mybatis有以下核心組件:
Configuration:Mybatis所有的配置信息都維持在Configuration 對(duì)象之中
SqlSession:作為Mybatis 工作的主要頂層API,表示和數(shù)據(jù)庫(kù)交互的會(huì)話(huà),完成數(shù)據(jù)庫(kù)增刪查改功能
Executor:Mybatis 執(zhí)行器,是Mybatis 調(diào)度的核心,負(fù)責(zé)SQL
StatementHandler:封裝了JDBC Statement 操作,負(fù)責(zé)對(duì)JDBC statement 的操作,如設(shè)置參數(shù),將 Statement 結(jié)果集轉(zhuǎn)換為L(zhǎng)ist 集合
ParameterHandler:負(fù)責(zé)對(duì)用戶(hù)傳遞的參數(shù)轉(zhuǎn)換為JDBC Statement 所需要的參數(shù)
ResultSetHandler:負(fù)責(zé)將JDBC返回的ResultSet結(jié)果集對(duì)象轉(zhuǎn)換為L(zhǎng)ist 類(lèi)型的集合
MappedStatement:MappedStatement主要維護(hù)各個(gè)加載的sql語(yǔ)句的配置信息、映射關(guān)系等等
MapperProxy、MapperProxyFactory:Mapper 代理,使用原生的Proxy 執(zhí)行mapper 里的方法
其次,執(zhí)行過(guò)程有:
1、從mybatis-config.xml讀取全局配置文件,用于配置數(shù)據(jù)庫(kù)連接、屬性、類(lèi)型別名、類(lèi)型處理器、插件、環(huán)境配置、映射器(mapper.xml)等信息,這個(gè)過(guò)程中有一個(gè)比較重要的部分就是映射文件其實(shí)是配在這里的;這個(gè)核心配置文件最終會(huì)被封裝成一個(gè)Configuration對(duì)象
2、加載SQL映射文件,該文件中配置了操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句,映射文件是在mybatis-config.xml中加載;可以加載多個(gè)映射文件。常見(jiàn)的配置的方式有兩種,一種是package掃描包,一種是mapper找到配置文件的位置。
3、用建造者設(shè)計(jì)模式使用SqlSessionFactoryBuilder對(duì)象構(gòu)建的,SqlSessionFactory的最佳作用域是應(yīng)用作用域。
4、由會(huì)話(huà)工廠(chǎng)創(chuàng)建SqlSession對(duì)象,對(duì)象中包含了執(zhí)行SQL語(yǔ)句的所有方法,每個(gè)線(xiàn)程都應(yīng)該有它自己的SqlSession實(shí)例。SqlSession的實(shí)例不是線(xiàn)程安全的,因此是不能被共享的,所以它的最佳的作用域是請(qǐng)求或方法作用域,并把執(zhí)行器放進(jìn)SqlSession中。
5、通過(guò)Executor執(zhí)行器,負(fù)責(zé)SQL語(yǔ)句的生成和查詢(xún)緩存的維護(hù),它將根據(jù)SqlSession傳遞的參數(shù)動(dòng)態(tài)地生成需要執(zhí)行的SQL語(yǔ)句,同時(shí)負(fù)責(zé)查詢(xún)緩存的維護(hù)。
6、通過(guò)MappedStatement對(duì)解析的SQL的語(yǔ)句封裝,一個(gè)MappedStatement代表了一個(gè)sql語(yǔ)句標(biāo)簽。
7、輸入?yún)?shù)類(lèi)型可以是基本數(shù)據(jù)類(lèi)型,也可以是Map、List、POJO類(lèi)型復(fù)雜數(shù)據(jù)類(lèi)型,這個(gè)過(guò)程類(lèi)似于JDBC的預(yù)編譯處理參數(shù)的過(guò)程,有兩個(gè)屬性 parameterType和parameterMap。再封裝結(jié)果集,可以是Map、List、POJO類(lèi)型復(fù)雜數(shù)據(jù)類(lèi)型。封裝結(jié)果集的過(guò)程就和JDBC封裝結(jié)果集是一樣的。也有兩個(gè)常用的屬性resultType和resultMap。