說明
MyBatis版本:3.5.1
相關歷史文章(閱讀本文之前,您可能需要先看下之前的系列👇)
前言
通過前面幾篇文章的介紹,想必大家對於MyBatis有了一個比較深的認知了,分析了原理之後,那麼手寫一個MyBatis就很簡單了,當然要寫成官方性能這麼高的,是需要比較深的技術功底了。
編碼核心對象分析
根據前面的文章,我們先分析一下要自己手寫一個MyBatis幾個不可少的核心對象:
(1)SqlSessionFactoryBuilder:用於構建SqlSessionFactory的。
(2)SqlSessionFactory : 用於管理SqlSession的。
(3)SqlSession:讓開發人員方便操作數據庫的。
(4)Executor:真正和數據庫進行交互的。
(5)MapperProxy:mapper接口的代理類。
(6)MapperStatement:用於保存xml配置的mapper信息。
編碼核心流程分析
爲了更好的理解,我們將整個流程分爲3個階段:
(1)初始化階段:解析配置文件(mybatis-config.xml)構建SqlSessionFactory。
(2)代理階段:封裝MyBatis的編程模型,使用mapper接口開發。
(3)數據讀寫階段:通過SqlSession完成SQL的解析,參數的映射,SQL的執行。
(1)如何解析配置文件?
.propeties文件的解析:可以使用Properties進行解析。
.xml文件的解析:可以使用JDom、 Dom4J、SAX
(2)MapperProxy
這個通過上面分析的話,就很簡單了,只要使用動態代理構建一個代理類就可以了。
(3)數據庫讀寫
數據庫讀寫的話,這個就是原生的jdbc進行執行SQL語句,在返回的數據中使用Java的反射技術組裝成一個實體類對象即可。