mybatis架構(gòu)
- mybatis配置
SqlMapConfig.xml,此文件作為mybatis的全局配置文件丛楚,配置了mybatis的運(yùn)行環(huán)境等信息。
mapper.xml文件即sql映射文件润匙,文件中配置了操作數(shù)據(jù)庫的sql語句胧砰。此文件需要在SqlMapConfig.xml中加載。 - 通過mybatis環(huán)境等配置信息構(gòu)造SqlSessionFactory即會(huì)話工廠
- 由會(huì)話工廠創(chuàng)建sqlSession即會(huì)話,操作數(shù)據(jù)庫需要通過sqlSession進(jìn)行奇徒。
- mybatis底層自定義了Executor執(zhí)行器接口操作數(shù)據(jù)庫雏亚,Executor接口有兩個(gè)實(shí)現(xiàn),一個(gè)是基本執(zhí)行器摩钙、一個(gè)是緩存執(zhí)行器罢低。
- Mapped Statement也是mybatis一個(gè)底層封裝對(duì)象,它包裝了mybatis配置信息及sql映射信息等胖笛。mapper.xml文件中一個(gè)sql對(duì)應(yīng)一個(gè)Mapped Statement對(duì)象网持,sql的id即是Mapped statement的id。
- Mapped Statement對(duì)sql執(zhí)行輸入?yún)?shù)進(jìn)行定義长踊,包括HashMap功舀、基本類型、pojo之斯,Executor通過Mapped Statement在執(zhí)行sql前將輸入的java對(duì)象映射至sql中日杈,輸入?yún)?shù)映射就是jdbc編程中對(duì)preparedStatement設(shè)置參數(shù)。
Mapped Statement對(duì)sql執(zhí)行輸出結(jié)果進(jìn)行定義佑刷,包括HashMap、基本類型酿炸、pojo瘫絮,Executor通過Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對(duì)象中,輸出結(jié)果映射過程相當(dāng)于jdbc編程中對(duì)結(jié)果的解析處理過程填硕。
mybatis 和 hibernate的區(qū)別
Mybatis和hibernate不同麦萤,它不完全是一個(gè)ORM框架,因?yàn)镸yBatis需要程序員自己編寫Sql語句扁眯。mybatis可以通過XML或注解方式靈活配置要運(yùn)行的sql語句壮莹,并將java對(duì)象和sql語句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結(jié)果再映射生成java對(duì)象姻檀。
Mybatis學(xué)習(xí)門檻低命满,簡單易學(xué),程序員直接編寫原生態(tài)sql绣版,可嚴(yán)格控制sql執(zhí)行性能胶台,靈活度高,非常適合對(duì)關(guān)系數(shù)據(jù)模型要求不高的軟件開發(fā)杂抽,例如互聯(lián)網(wǎng)軟件诈唬、企業(yè)運(yùn)營類軟件等,因?yàn)檫@類軟件需求變化頻繁缩麸,一但需求變化要求成果輸出迅速铸磅。但是靈活的前提是mybatis無法做到數(shù)據(jù)庫無關(guān)性,如果需要實(shí)現(xiàn)支持多種數(shù)據(jù)庫的軟件則需要自定義多套sql映射文件,工作量大阅仔。
Hibernate對(duì)象/關(guān)系映射能力強(qiáng)济竹,數(shù)據(jù)庫無關(guān)性好,對(duì)于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發(fā)可以節(jié)省很多代碼霎槐,提高效率送浊。但是Hibernate的學(xué)習(xí)門檻高,要精通門檻更高丘跌,而且怎么設(shè)計(jì)O/R映射袭景,在性能和對(duì)象模型之間如何權(quán)衡,以及怎樣用好Hibernate需要具有很強(qiáng)的經(jīng)驗(yàn)和能力才行闭树。
總之耸棒,按照用戶的需求在有限的資源環(huán)境下只要能做出維護(hù)性、擴(kuò)展性良好的軟件架構(gòu)都是好架構(gòu)报辱,所以框架只有適合才是最好与殃。