8月5日总结

又是两天没写了,总结一下这周的生活吧。
8月2日,在俱乐部包宿,做了件很有意义的事
8月3日,上午还奋战在一线,中午回寝后开始睡觉,直到18:30才醒,算是把觉给补回来了。
8月4日,正常开发,不过感觉似乎没做什么实质性的东西出来,为了做分页,添加了displaytag,用起来倒是十分方便,只是当压力测试(通俗地说就是在数据库里存上万条记录,让它分页)的时候,它的弊端就很明显的露出来了,一个字慢,两个字死慢,根本提不出数据。原因在于它是一次先将所有的查询结果取出,之后保存在内存中,分页显示。试想上万条记录,怎会不死。看着cpu占用率和内存都狂飙,马上决定不用它,自己编。
8月5日,早上来得早,手中拿着钥匙,却被锁在了俱乐部的大门外。近两天接连领教了这道“铁门”的利害。但是,对门的实验室一位师兄却比较轻松的在1分钟之内搞定了那道门,我真怀疑我手上的钥匙有问题。
进了门,恢复了SL的版本,将displaytag彻底驱逐,用了一上午加一中午的时间实现了分页,速度可以让displaytag羞死(不过话说回来,人家除了这一点还是非常好用的)。

整理一下实现的思路:
新建了一个类pagination用户获取一个页面显示的list结果,需要当前页码、最大页数、数据总量(这个是用另外的query获得的)、每页显示数量和一个具体的query对象。先检查各变量的合法性,计算取得第一条记录的索引数,然后对query对象调用setFirstResult()和setMaxResults()方法,设定好起始数和最大获取数。在这之前不要进行query.list()的操作,这个是速度的关键,因为在设定最大获取数之前,会取出所有的记录,和displaytag的效果会是一样的。这样,pagination就算是写完了,他将返回query的得到的list对象,只是一页的内容。
之后需要在action层调用它的static方法,取得list。然后就简单了。
缺点:对代码的侵入比较大,需要修改几乎每一层的代码,虽然改动都不算很大,但是还是很麻烦,以后修改和维护都会造成问题。还须进一步改进。

你可能感兴趣的:(生活)