MyBatis 源码解读-带着问题去看源码
分析源碼,我們還是從編程式的demo 入手。Spring 的集成我們會在后面講到。
InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlogById(1);把文件讀取成流的這一步我們就省略了。所以下面我們分成四步來分析。
第一步,我們通過建造者模式創建一個工廠類,配置文件的解析就是在這一步完成的,包括mybatis-config.xml 和Mapper 適配器文件。
問題:解析的時候怎么解析的,做了什么,產生了什么對象,結果存放到了哪里。解析的結果決定著我們后面有什么對象可以使用,和到哪里去取。
第二步,通過SqlSessionFactory 創建一個SqlSession。
問題:SqlSession 是用來操作數據庫的,返回了什么實現類,除了SqlSession,還創建了什么對象,創建了什么環境?
第三步,獲得一個Mapper 對象。
問題:Mapper 是一個接口,沒有實現類,是不能被實例化的,那獲取到的這個Mapper 對象是什么對象?為什么要從SqlSession 里面去獲取?為什么傳進去一個接口,然后還要用接口類型來接收?
第四步,調用接口方法。
問題:我們的接口沒有創建實現類,為什么可以調用它的方法?那它調用的是什么方法?它又是根據什么找到我們要執行的SQL 的?也就是接口方法怎么和XML 映射器里面的StatementID 關聯起來的?
此外,我們的方法參數是怎么轉換成SQL 參數的?獲取到的結果集是怎么轉換成對象的?
接下來我們就會詳細分析每一步的流程,包括里面有哪些核心的對象和關鍵的方法。
?
總結
以上是生活随笔為你收集整理的MyBatis 源码解读-带着问题去看源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis 缓存详解-第三方缓存做二
- 下一篇: MyBatis 源码解读-配置解析过程