问题:
现在项目中的分页查询是这样的:前台传递关键字 到controller 然后交由hibernate 去做分页查询 在这中间 就不可避免的需要得到 总条数 既然要获得总条数 就不可避免的要查询整个表记录 我认为在获得总条数 这一步可以做点文章 能否将总记录条数放进缓存??
javaeye的大牛或小牛能否给出一些思路 谢谢!
[b]问题补充:[/b]
首先谢谢 [star022] 的回答
我想说下我的想法 有关于保存 总条数
我想在应用启动时 将每个模块的 总记录条数 放置于 ServletContext 中
以后每次操作(记录的添加|删除) 就更新 ServletContext 中相应的 总条数。
不知性能如何。
[b]问题补充:[/b]
谢谢 [star022]
将每个模块的 总记录条数 放置于 ServletContext 中
以后每次操作(记录的添加|删除) 就更新 ServletContext 中相应的 总条数。
不建议这么做,为什么要和ServletContext产生关联?
真正关心记录条数的只有分页组件和记录条数维护组件(增加或删除记录的代码);
直接做成静态的,你在前后台访问不都很容易吗? 这样你可以很方便地将记录条数注入分页组件。
如果不是分布式运用,我认为可以!
如果记录数超大,每次分页都取查询总数,显然性能不够理想,可以这么做:
*专门拿一个静态整数保持记录总数count,初始值为0;
*第一次查询分页,总数默认值为0,此时可以去表中查询总数,然后保持在count中;
*针对该表记录的增加和删除方法,做一个记录统计,每次增加一条记录count+1,删除一条,count - 1;
*记录大的表一般是需频繁做“写”操作的表,因此不要对新增和删除方法做同步,牺牲点count统计的严格性来提高性能,应该值得考虑;
*如果是分布式运用,对一张表操作,则还需要集群中的server count同步,需要用jms来做同步,这样做具体性能如果要看实际情况,如果不理想的情况下,只能每次分页都统计下总数了。