以前,不熟悉Ibatis的时候,自己写了一个类似Ibatis的查询分页框架,SQL配置在XML文件当中,提供脚本语法的功能。
后来,觉得Ibatis完全能替代自己的框架,还有Cache、Transaction等强功能。
但是跟踪到源码才发现Ibatis完成是基于内存分页的,而且方法已经Depreciated. 内存分页对我的应用来说,是一点不实用的,其实就是一个废物。
但是Ibatis又不提供任何的回调接口,可以让调用者扩展。
于是我不得不重新修改了Ibatis的源码,向外部透出了一个回调接口,供分页SQL使用,并重新打包成jar文件让开发人员使用。
这真是不爽之极,为什么Ibatis不能提供,这么强大的框架都做出来了,但这个小小的分页,却做不了,如果你做不了,其码也要透一个接口给我呀。
所以对于框架来说,职责的分担,是很重要的,完成你该完成的,该扩展的地方,即要提供默认实现,也要提供接口,供调用者二次开发。这才是框架的可扩展性、灵活性所在。
很多人在开发框架时,总期望做很多东东,自己给自己加套,反而丧失的灵活性,同时提供了很多不能扩展的实现,等于强加意志给使用者,爱用不用。
相信很多人在用Ibatis的时候,也有同感,对于数据库分页查询,应当是非常重用,非常普遍的一个功能,Ibatis竟然做的是如此的差,一些人在使用Ibatis的时候,不得不写了两套SQL,一个查询总行数的,一个是查询某一页的SQL。实际上,ibatis完全可以根据一个SQL来生成这两个SQL,并自动分页。