如果要翻MyBatisPlus的源碼,我們先翻MyBatis的源碼
秉承一張圖勝過百句廢話,下面是源碼的跳轉過程
以下是描述如何獲取SqlSession的過程
以下是MapperProxy動態代理Dao接口過程
以下是執行SQL查詢的過程
那麼整個MyBatis執行總結一下如下
SqlSession:對外的接口
MyBatis的四大接口強行記一下
Executor:內部執行器
StatementHandler:負責處理Mybatis與JDBC之間Statement的交互
ParameterHandler:負責為 PreparedStatement 的 sql 語句參數動態賦值
ResultSetHandler: 就是將ResultSet結果集映射為Bean、List、Map等Java中的對象或者集合
下斷點在org.apache.ibatis.session.Configuration能看到以上提到的四大接口的身影
newParameterHandler、newResultSetHandler、newStatementHandler、newExecutor
敲黑板,MyBatis通過插件的方式完成分頁就靠這裡newExecutor方法找蹤影
====以上簡單回顧一下MyBatis分頁插件====
那麼我們今天的重點是看看MyBatisPlus分頁插件
@MapperScan註解找到
在MapperFactoryBean我們又看到Configuration的身影
那不用廢話了吧,繼續找newExecutor方法看到攔截器,所以說MyBatisPlus果然是MyBatis的增強版,套路是一樣的,MyBatisPlus也是遵循Mybatis設計理念,通過設置註解的方法實現加載動態sql語句而已
====分析到這裡索性把MyBatisPlus執行SQL流程也走一遍====
那其實還是老套路@MapperScan註解進入MapperFactoryBean類
這回進入addMapper方法,這裡MP用了點小手段,不要去找MapperRegistry的addMapper方法,而是走到MybatisMapperRegistry的addMapper方法
parser.parse()進去
下斷點,這裡看到BaseMapper.xxxx的各種方法
再聯想下Dao層繼承的BaseMapper<T>有沒有想起來點什麼??!!
最後面試會問除了分頁插件,還有沒有其他分頁方式
常見的四種分頁方式總結一下
分頁類型優點缺點數組分頁簡單不是物理分頁,性能差Sql分頁真實分頁,性能高冗餘,不是統一管理,維護性差RowBounds
MyBatis自帶分頁,簡單內存分頁,性能差MyBatis插件一次編寫,避免多次配置出錯
,需要修改時修改一個文件即可
開發難度大每日一論:
今天真要說說關於學習編程的第一步,國內雖然不能Google,但是我發現,大部分人真不會百度,是真的不會,我覺得都不是伸手黨,應該叫伸嘴黨,為何?你想啊,他連百度都懶得百度,直接就過來問問題!!!
看到一篇回帖很精彩內容如下
所以我用剪貼板固定存了幾個問題的答案,每次看到直接粘貼。當一個人學會用百度的時候,他就不會在這問了——所以問的肯定都不會去百度,說了也是白說。
一些人的問題的處理流程,請大家好好品品
1.對方問我問題,我幫他百度後把答案發給他。
2.對方百度找不到答案再問我,我換個關鍵詞依舊百度找到答案後發給他。
(很多人不懂得如何運用搜尋引擎獲取自己想要的信息)
3.對方在網際網路上找不到有其他人遇到過這個bug,但我剛好之前遇到過,知道怎麼解決。
(基本是同專業的同事問的。)
4.當然還有一種情況,就是對方百度真的找不到答案,而我有谷歌…當然這種情況幾乎沒見過,大部分是直接找我要梯子。