本文知識要點:
1.?工廠模式的使用
2.泛型的使用
3.ClassScanner.scanPackage(packageName)?的使用,這個類是hutool?包下的一個類坐搔,這個方法功能是拳氢,將包下的文件掃描之后返回類的模版類型Class?的set?集合
4.Class?模板類的使用践剂,包括方法?Class?.isInterface()?判斷是否是接口
situation:?
目前實現(xiàn)了簡單的映射器Mapper代理工廠,主要作用是使用動態(tài)代理 圣蝎,將dao層的接口代理出來,以便調(diào)用處調(diào)用
task:
1.需要將dao層接口與mapper?映射器關(guān)聯(lián)起來,需要創(chuàng)建一個注冊器衡瓶,來掃描包路徑完成mapper?的注冊
2.將?處理數(shù)據(jù)庫捅彻,mapper相關(guān)的操作?封裝在sqlsession里,并為sqlsession?提供一個工廠類
action:
1.?映射器注冊器執(zhí)行流程如下鞍陨,圖來自小傅哥的博客
步驟:
1.創(chuàng)建核心類注冊器 MapperRegistry 步淹,MapperRegistry?對外提供?addMappers(String packagePath)方法,該方法的功能是诚撵,根據(jù)入?yún)⒌陌窂界择桑瑢⒃撀窂较碌奈募呙瑁成涑删唧w的類對象寿烟,存儲在MapperRegistry? 的成員變量里 消略,后續(xù)需要使用具體的mapper ,傳入mapper類型嗡贺,對應(yīng)的在這個成員變量里查找并返回。
2.創(chuàng)建sqlsession,該類封裝了查詢數(shù)據(jù)庫的一些列操作蠕啄,如selectOne(),update(),getMapper()?等采缚,
3.?創(chuàng)建sqlsession的工廠類SqlSessionFactory锄贼,負(fù)責(zé)sqlsession?實例的獲惹凇;
4.?編寫?sqlsession?與?SqlSessionFactory?的實現(xiàn)類待锈;
5.?編寫測試用例:測試用例流程是:
? ?5.1 創(chuàng)建注冊器?MapperRegistry?
? ?5.2?執(zhí)行注冊器addMappers方法
? ?5.3將指定路徑下的Dao?接口代理類注冊到注冊器里
? ?5.4將注冊器作為sqlsessionFactory?的構(gòu)造器入?yún)⒛洌瑒?chuàng)建sqlsessionFactory? 對象,通過?這個工廠類獲得sqlsession對象竿音,這樣這個sqlsession?對象就間接持有了Dao?接口代理類
? ?5.5獲得映射器代理類對象和屎,執(zhí)行指定的方法
result:
見本文知識要點