欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

ibatis是如何找到dao層的

錢浩然2年前13瀏覽0評論

ibatis是如何找到dao層的?

介紹

本質還是很簡單的,原來用JDBC實現的時候,你得寫各種類,類里面寫好各種操作SQL的語句,現在用了XML以后,只不過是把這些信息保存到XML中了,運行的時候還是會有類來執行SQL語句的,這個類是怎么來的呢?是Mybatis框架利用:動態代理和反射機制這2種機制,來幫你把這個類給創建出來,簡單總結一下原理,你可以去看看mybatis的源碼,類不多,還是比較容易理清楚的,我幫你總結一下大概流程

Mybatis的運行分為兩部分,第一部分是讀取配置文件緩存到Coufiguration對象,用以創建SqlSessionFactory,第二部分是SqlSession的執行過程。

Mybatis實現的基本原理是利用:動態代理和反射機制。動態代理中用到JDK動態代理和CGLIB代理。這兩者的區別是,JDK動態代理是接口的,CGLIB代理是對于類的。Mybatis中這兩種代理都用到過,Mapper中用到的是JDK動態代理,在延遲加載的時候用到CGLIB代理。

(1) 構建SqlSessionFactory過程

SqlSessionFactory是Mybatis的核心類,主要功能時提供創建Mybatis的核心接口SqlSession,我們需要創建SqlSessionFactory,為此我們提供配置文件和相關參數。通過SqlSessionFactoryBuilder去構建。

首先通過org.apache.ibatis.builder.xml.XMLConfigBuilder解析配置的XML文件,讀取配置參數,并將讀取的數據存入這個org.apache.ibatis.session.Configuration類中。其次使用Configuration對象去創建SqlSessionFactory。

(2) 構建Configuration

Configuration的作用;

1) 讀取配置文件,包括基礎配置的XML文件和映射器的XML文件

2) 初始化基礎配置,比如Mybatis的別名等,一些重要的類對象,例如,插件、映射器、ObjectFactory和typeHandler對象。

3) 提供單例,為后續創建SqlSessionFactory服務并提供配置的參數。

4) 執行一些重要的對象方法,初始化配置信息。

(3) 映射器的內部組成

一般而言映射器有三部分組成,MappedStatement、SqlSource和BoundSql。

MappedStatement:它保存了一個映射器的節點(select|delete|update)。包括許多我們配置的SQL、SQL的id、緩存信息、resultMap、paramterType、resultType、languageDriver等重要配置信息。

SqlSource:提供BoundSql的地方,它是MappedStatement的一個屬性。是一個接口,主要作用是根據參數和其它的規則組裝SQL。

BoundSql:建立SQL和參數的地方。常用用用三個參數:SQL,parameterObject、parameterMappings。

(4) 構建SqlSessionFactory

sqlsessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

(5)SqlSession運行過程

SqlSession是一個接口,使用它并不復雜。我們構建SqlSessionFactory就可以輕松容易地拿到Sqlseesion了。

1) 映射器的動態代理

Mapper映射是通過動態代理來實現的。映射器的xml命名空間對應的便是這個接口的全路徑,那么它根據全路徑和方法名便能夠綁定起來,通過動態代理技術,讓這個接口跑起來。

2) SqlSession下的四大對象

映射器其實就是一個動態代理對象,進入到了MapperMethod的execute方法。它經過簡單的判斷就進入了SqlSession的刪除、更新、插入和選擇等方法。

Mapper的執行其實就是通過Executor、StatementHandler、ParameterHandler和ResultHandler來完成數據操作和結果的返回。

Executor:執行器,由它來調度StatementHandler、Parameterhandler、ResultHandler等來執行對應的SQL。

StatementHandler:使用數據的Statement執行操作,它是四大對象的核心,起到承上啟下的作用。

ParameterHandler:用于SQL對參數的處理。

ResultHandler:進行最后數據集(ResultSet)的封裝返回處理。

1) 執行器(Executor):它是一個真正執行Java和數據交互的地方。在Mybatis中有三種執行器。SIMPLE(簡單執行器,這是默認的)、REUSE(重用預處理語句)和Batch(執行重用語句和批量更新,它是針對批量專用的執行器)。

2) https://www.b5b6.com/shujuku/會話器(StatementHandler):專門來處理https://www.b5b6.com/shujuku/會話的。

3) 參數處理器(ParameterHandler):對預編譯語句進行參數處理。

4) 結果處理器(ResultSetHandler):組裝結果集的返回。

(5) 總結

SqlSession是通過Executor創建StatementHandler來運行的,而StatementHandler要經過下面的三步。Prepared預編譯SQL、parametersize設置參數和query/update執行SQL。

其中parametersize是調用parameterHandler的方法去設置的,而參數是根據類型處理器typeHandler去處理。query/update方法通過resultHandler進行處理結果的封裝,如果是update語句,它就返回整數,否則它就通過typeHandler處理結果類型,然后用ObjectFactory提供的規則組裝對象,返回給調用者,這就是SqlSession執行的過程。

java反射 set方法,ibatis是如何找到dao層的