1) 問題: xxxMapper 繼承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法,
方法來源於 BaseMapper, 有方法就必須有 SQL, 因為 MyBatis 最終還是需要通過 SQL 語句操作數據.
前置知識:MyBatis 源碼中比較重要的一些對象, MyBatis 框架的執行流程 Configuration MappedStatement ……..
2) 通過現象看到本質
A. employeeMapper 的本質 org.apache.ibatis.binding.MapperProxy
B. MapperProxy 中 sqlSession –>SqlSessionFactory

C. SqlSessionFacotry 中 → Configuration→ MappedStatements 每一個 mappedStatement 都表示 Mapper 接口中的一個方法與 Mapper 映射文件 中的一個 SQL。
MP 在啟動就會挨個分析 xxxMapper 中的方法,並且將對應的 SQL 語句處理好,保 存到 configuration 對象中的 mappedStatements 中.
D. 本質:

Configuration: MyBatis 或者 MP 全局配置對象
MappedStatement:一個 MappedStatement 對象對應 Mapper 配置文件中的一個 select/update/insert/delete 節點,主要描述的是一條 SQL 語句
SqlMethod : 枚舉對象 ,MP 支持的 SQL 方法
TableInfo:數據庫表反射信息 ,可以獲取到數據庫表相關的信息
SqlSource: SQL 語句處理對象
MapperBuilderAssistant: 用於緩存、SQL 參數、查詢方劑結果集處理等. 通過 MapperBuilderAssistant 將每一個 mappedStatement 添加到 configuration 中的 mappedstatements 中




