最近由于课程设计,使用SSH框架开发了一个小型网上选课系统,在开发过程中,涉及到了数据页面显示的分页。
这次的开发算是自己独立使用框架开发的第一个J2EE项目,由于缺乏开发经验,所以这次的分页处理出现了很多问题。
当时分页使用的是在Action中写了三个方法:check() 、prePage()、nextPage(),并且将数据是一次性从数据库读出来,存放在List对象中,然后存在session中。
后来做了一些考虑:
1.可以自己写一个工具类,处理分页
2.数据的读取是一次性读取出来存放在session中还是每次点击下一页(上一页)再去读更好,哪个性能更优
对于这些问题,我后来做了一些处理,自己写了个接口ISimpleton并写了实现类SimpletonImpl,主要包括三个方法:
/**
* 分页
* @param obj
* @param pageSize
* @param currentPage
* @return Map<String, Integer> pageMap
* @author Simpleton 2012-12-11
*/
public Map<String,Integer> pagePart(Object obj,int pageSize, int currentPage);
/**
* 上一页
* @param pageMap
* @return Map<String, Integer> pageMap
* @author Simpleton 2012-12-11
*/
public Map<String, Integer> prePage(Object obj,int pageSize, int currentPage);
/**
* 下一页
* @param pageMap
* @return Map<String, Integer> pageMap
* Simpleton 2012-12-11
*/
public Map<String,Integer> nextPage(Object obj,int pageSize, int currentPage);
该工具类虽然实现了,但是由于最近比较忙,还有要做修改的地方。
另外对于读数据的问题,考虑到如果一次性读取数据,然后存放在session中,由于session生存期太长,服务器内存吃不消,性能不佳,然后去JAVA吧请教了大牛们,得到了一个很好的答案:
一次性查询出来是绝对不行的,这太搞笑了,可以一次查3页出来,比如查第7页,可以把6,7,8都查出来,显示第7页,别人点了下一页时直接显示第8页的同时后台偷偷读出第9页
这个方法兼容了数据量很大的问题,还好的方法