mybatis面向介面程式設計實踐與mapper代理物件的產生
上篇提到面向介面程式設計需要使用getMapper獲取代理物件,今天我們來看一下mapper代理物件是如何產生的,在此之前先回憶下面試介面程式設計。 一、Mybatis面向介面程式設計實踐 (一)使用xml的方式 1.定義mapper介面 Mapper介面就是一個普通的介面。 2.定義mapper對映檔案 3.在全域性配置檔案中配置mapper對映檔案 上篇我們也說過,雖有多種方式觸發檔案解析與介面注入,不做此步驟也能完成(搞清楚一個前提我們現在說的都是在mybatis面向介面程式設計方式下),但是我們建議通過配置對映檔案的方式觸發mybatis自動掃描注入。配置方式有多種,不在贅述。我們的配置方式如下:
mapperRegistry中getMapper,首先通過Class型別在knowMappers中獲取mapperProxyFactory.這個變數就是個hashMap,是所有註冊的mapper介面,上篇我們提到過。方法直接返mapperProxyFactory.newInstance(sqlSession).我們接著看下
他有一個快取避免了每次都重新生成一個物件,因為這個物件的建立過程比較複雜。 構造方法如下: SqlCommand和MethodSignature為兩個內部類,先看一下SqlCommand
判斷如果存在對應的sql語句,則取到相應的MappedStatement物件,這個物件包含了對映檔案中定義的語句(如select)的所有資訊,比如引數,返回值,具體sql,型別(增刪蓋查)。。。等等等 內部類MethodSignature定義了介面中方法的各種資訊。
至此MapperMethod物件完成建立。接下來呼叫execute方法。
該方法中根據語句型別,迴歸原始直接呼叫了sqlSession中的增刪蓋查方法,執行sql.根據配置和方法資訊拼裝返回結果。到此一個實現了mapper介面的代理物件生成完成,所以你可以盡情的使用此物件呼叫方法啦。