[Brave]Java数据访问层如何实现通用不依赖第三方的产品化分页
因为具有产品化特点,请比较挑剔的帮我想想吧,这里先谢谢了!
说明:
1:问题的关键是通用和不依赖第三方,也就是让绝大部分人满意;
2:尽可能的给出设计甚至代码作参考更好;
3:请详细的评论各种实现的好坏;
4:可以给出参考哪些具体的东西,但希望有很好的水准的实现。
EJB层使用DAO模式实现下列三个功能
1. 获得整个数据表记录总数。
2. 获取符合查询条件的所有数据ID集合。
3. 根据ID查询获取某个完整数据对象记录。
Web层基于Struts,分别实现下列功能
1. Action中对所有数据ID集合实现遍历时,根据ID获取完整数据对象,最后形成数据对象集合,保存在ActionForm中。
2. 使用标签库显示多页,标签库主要从ActionForm中获取相关信息。
3. Jsp页面显示,使用loigc:iterator 从ActionForm数据对象集合中遍历数据对象。
在Web层实现数据对象缓存,原理:
根据ID获得完整数据对象的实现方法:
1.查询缓冲;
2. 如果没有,再根据ID读取数据库。
如果一个数据对象第二次被查询,它的数据将不再通过后台EJB获取,提高了查询性能。
该产品已经经过性能并发测试,应用在多个OA系统中,需要和我联系。哈,做广告了。
我目前暂时实现为简单的 PetStore 的分页方式,将来会提供多种分页方式的选择,包括:Data List模式和您说的这个方法(会结合快速查询实现)。还请多指教,如果有代码框架就好了。呵呵,要求有点过分呢。不过久仰大名,怎么舍得不问您呢。呵呵。
那剩下的无非就是想办法知道一个 Query 有多少 records, page size 是多少,算一算就知道该分多少 page, 每个page range 的开始与结束 offset. 再复杂一点的就是加上点 cache 机制咯,同一个 query condition 的直接返回相应的 records. 不过要记得更新就是了,要是你不想自己写这种 cache, 用 poolman 就好了。打开 cache 设置,它帮你完成。当然,你要准备大一点内存。
理论就那么多,具体实现的可维护性,可扩展性以及稳定性等方面就看功底咯~~
饭就免了 我还要减肥
通用的东西,想法是好,关键还是中间会牺牲多少其他的东西
比如,jvm多好,同时,也牺牲了不少性能,^_^~
petstore的那种方式在反复查询时,都需要访问后台EJB,性能不算最好,我使用的CACHE是在Web层,越在前面,性能越好。类似Jive的批量查询。
hibernate可以满足你提出的这几点要求。
有其他的想法,请多指教,请非常挑剔的说,因为定位是产品性质的。
BTW,我这里强调的是在数据访问层的实现,所以,banq的方式似乎超出我的问题范围,当然很值得参考(如果有实际的代码框架更好,以免误会您的意见,等您的大作。^_^ ^_^),这里更多的强调对外提供的接口或者对象的封装,需要自然而且确实实现得好。