?? 以前,不熟悉Ibatis的時(shí)候,自己寫了一個(gè)類似Ibatis的查詢分頁框架,SQL配置在XML文件當(dāng)中,提供腳本語法的功能。
?
??? 后來,覺得Ibatis完全能替代自己的框架,還有Cache、Transaction等強(qiáng)功能。
?? 但是跟蹤到源碼才發(fā)現(xiàn)Ibatis完成是基于內(nèi)存分頁的,而且方法已經(jīng)Depreciated. 內(nèi)存分頁對(duì)我的應(yīng)用來說,是一點(diǎn)不實(shí)用的,其實(shí)就是一個(gè)廢物。
?? 但是Ibatis又不提供任何的回調(diào)接口,可以讓調(diào)用者擴(kuò)展。
?? 于是我不得不重新修改了Ibatis的源碼,向外部透出了一個(gè)回調(diào)接口,供分頁SQL使用,并重新打包成jar文件讓開發(fā)人員使用。
??? 這真是不爽之極,為什么Ibatis不能提供,這么強(qiáng)大的框架都做出來了,但這個(gè)小小的分頁,卻做不了,如果你做不了,其碼也要透一個(gè)接口給我呀。
??? 所以對(duì)于框架來說,職責(zé)的分擔(dān),是很重要的,完成你該完成的,該擴(kuò)展的地方,即要提供默認(rèn)實(shí)現(xiàn),也要提供接口,供調(diào)用者二次開發(fā)。這才是框架的可擴(kuò)展性、靈活性所在。
??? 很多人在開發(fā)框架時(shí),總期望做很多東東,自己給自己加套,反而喪失的靈活性,同時(shí)提供了很多不能擴(kuò)展的實(shí)現(xiàn),等于強(qiáng)加意志給使用者,愛用不用。
??? 相信很多人在用Ibatis的時(shí)候,也有同感,對(duì)于數(shù)據(jù)庫(kù)分頁查詢,應(yīng)當(dāng)是非常重用,非常普遍的一個(gè)功能,Ibatis竟然做的是如此的差,一些人在使用Ibatis的時(shí)候,不得不寫了兩套SQL,一個(gè)查詢總行數(shù)的,一個(gè)是查詢某一頁的SQL。實(shí)際上,ibatis完全可以根據(jù)一個(gè)SQL來生成這兩個(gè)SQL,并自動(dòng)分頁。