
易哥
本書是一本以MyBatis源碼爲材料,詳細介紹源碼閱讀相關方法和技巧的指導書籍。 本書以MyBatis源碼中的包爲單位,詳細和透徹地介紹每個類的源碼,包括其背景知識、組織方式、邏輯結構和實現細節。在本書的講解中,不漏過每一個類,不跳過每一個難點,做到深淺一致。在閱讀MyBatis源碼的過程中,本書使用了運行初探、模塊歸類、合理猜測、類比閱讀、網格閱讀等許多源碼閱讀方法。最後,本書對這些源碼閱讀方法進行了總結整理。 本書適合想要開展源碼閱讀、想要借鑑優秀設計和想要深入瞭解MyBatis原理的開發者閱讀使用。本書能讓讀者在詳細瞭解MyBatis源碼的基礎上提升自己的源碼閱讀能力、系統架構能力及軟件開發能力。
對於還沒有完整讀過源碼的小夥伴,本書建議的源碼閱讀方式,還是有一定參考性。mybatis是Orm的實現,搞清楚o指的是java對象,r指的是關係型數據庫,m映射是把Java方法和sql語句關聯起來,這一核心觀點後,再去看源碼,會得心應手。 對於閱讀源碼,我想起來5年前的我,我當時有段時間,像中毒了一樣,每個周看個框架源碼,然後寫一篇Csdn,持續了大概一年左右。 我也可以談下我的源碼閱讀方式,首先第一步是選擇讀哪些,先是jdk 本身的源碼,例如io、lang、collection、concurrent等等,先把Java自身的讀完。然後是各大開源組織的,例如apache 的、spring 的;各大互聯網公司的,例如google的、Netflix 的、阿里的、京東的,等等,當然國外的github 和國內的gitee 可以多去逛逛。 第二步,選擇完一個主題後,先看這個框架的功能,還有類似的框架有哪些,從功能上個有什麼優缺點,找個10篇左右的Csdn或者博客園的文章,先一股腦看完再說。 第三步,寫測試用例,把主要功能都儘量run起來,有個體感,同時開始沿着主線讀源碼,遇到看不懂的,先打個斷點,debug的時候,再詳細看下,對於不屬於這個框架的問題,可以先放着,後面再慢慢研究。 第四步,一定要輸出,當你搞清楚這個框架有哪些功能、跟類似的框架比有啥優缺點,從架構和實現上,包括設計模式、用到的依賴包、設計的比較精巧的點,都寫出來,這裏又是一個思維提升的過程,在這裏會反過來,讓你繼續去深入閱讀源碼,持續解決第三步未解之謎。 當你形成習慣後,例如我們說網絡協議相關的框架,netty 、okhttp、httpclient等等之類的,你應該不陌生;提到字節碼修改的,例如asm、cglib、javaasist 、byte-buddy,這些你應該不陌生;從你準備開始閱讀源碼,你會發現,要做的事情太多了,不過一步一個腳印,你會發現,付出是值得的。
主要是講Mybatis源碼,但是通過詳解Mybatis源碼總結如何閱讀開源項目,分享了閱讀開源項目的方法。授人以魚同時也授人以漁。非常適合對於開源項目無從下手的工程師
本書可以作爲指導研究mybatis更深原理的入門書籍,在此過程中可以學會閱讀源碼的一些技巧,但是技巧不可能適合所有人,仍需自己實打實去看源碼並且總結學習,本書值得一讀
真的是源碼解析,範圍就在源碼,擴展太少了。
挺好,適合初學者閱讀,整體講解較淺,不過 MyBatis 的源碼本來也相對簡單。
作者分析源碼的邏輯和思路是值得我們學習的,由表及裏,由淺入深,非常贊同書裏面的一句話,也就是二十五章總結裏說的,通過功能猜測源碼要比通過源碼猜測功能簡單得多。在以後的源碼學習中,最好做到會用框架,再讀源碼,不要爲了讀源碼而讀源碼,在明白框架功能的基礎上,再帶着如何實現的問題去閱讀源碼的實現思路,我們纔會真正的理解源碼中一些比較優秀的設計理念,我們閱讀源代碼的目的才真正達到了。
回顧MyBatis這本書,總結如下: MyBatis是一個半ORM的框架,,其中比較重要的幾個對象 1、XML或者註解形式的配置是通過一個工廠模式的ConfigBuilder讀取,主要是封裝Configuration對象的一些屬性。無論mybatis-config.xml還是基於yml、properties的配置都是封裝MyBatis的Configuration對象,其中包含(數據源、駝峯、掃描包路徑、XML配置路徑、開啓緩存、映射器、類型枚舉等) 2、mappedStatement,此對象是將interface和XML配置的SQL封裝的對象,其中包含statement(接口的相對路徑),SQL配置,paramter、result、class等,當調用MyBatis接口時,其實是Executor獲取session後執行配置中的sql,查詢到數據後根據配置的resultMap或者resultType封裝返回結果進行返回。 3、Executor,一共包含四種,Simple、Cache、Reuse和Base,base是執行一級緩存的執行器,一級緩存是session級別的,其作用域可以配置session或者statment。二級緩存是namespace級別的,其是cachingExecutor實現的,如果二級緩存開啓後一級緩存是有cachingExecutor中的delegate對象實現,此處用到了裝飾者模式,不過在正常的開發中二級緩存不會用到,大部分的場景都是IO密集型,如果開啓二級緩存在不考慮準確度情況下無疑是對系統的複雜性提升了很多,況且二級緩存的數據準確性也並非可圈可點。而緩存失效的場景也很多,如commit、inset、update、delete、flush等。緩存的策略有很多這裏可以參考redis,如LRU、FIFO、Synchornized、Blocking、Schedule等。 4、Environment是封裝數據源的對象,數據源分兩種pool和unpool,池化數據源的delete操作是將當前連接釋放到連接池,沒有關閉的操作,而unpool的數據源delete是close,一般在項目使用中爲了節約資源都會選擇pool 5、事務,mybatis在執行SQL之前會根據配置(是否開啓事務,事務隔離級別等)添加事務處理代碼,此處有事務處理緩存,TranscationalCache用於緩存不同事物的結果 6、MyBatis中用到的設計模式、單例模式、工廠模式、責任鏈模式、裝飾器模式、代理模式等 7、其他的名詞,JDK動態代理interface、自增主鍵、懶加載、序列化、註解、typeHandler、Parsing、Binding、Parsing、Script等
Mybatis 源碼閱讀……歸類總結,組織劃分,功能實現 基礎功能包……裝飾器模式擴展功能,ObjectWrapperFactory,DefaultReflectorFactory,參數解析策略模式,BaseTypeHandler模版模式,代理模式,logging適配器模式 配置解析包……初始化,builder 構造者模式mapping包,SQL語句處理功能,scripting包完成解析(OGNL ),datasource包 核心操作包……參數解析、數據庫查詢、結果映射,緩存、懶加載、鑑別器處理、主鍵自增、插件支持(責任鏈模式),事務,cursor 開源……Guava,Tomcat,Redis,Dubbo,React
思想不錯,對應一個項目在猜測功能的基礎上,先對代碼分類,瞭解各類的功能及實現,在這個過程中使用猜測法,工具斷點調試,縱向橫向,自底向上,依賴與被依賴等方法來閱讀,最後領會設計意圖和模式,明白自己與優秀項目的區別
這本書很適合沒有讀過源碼的人讀。項目結構、功能劃分、基礎知識介紹、UML、具體代碼都提供了,一步一步引人入勝。讀者不會讀得一頭霧水,導致完全看不下去。當然最後的收穫還是得靠自己。慢慢來,不要急。掌握通用原理,其他技術的掌握也就快啦。