分页的第四种方式

来源:互联网 发布:淘宝客服催好评用语 编辑:程序博客网 时间:2024/05/18 18:43
是假分页

把数据都缓存在这一个类中
每次缓存一定数量的数据,找数据时,若是数据已经存在,则直接调用,否则再此从数据库中调出数据,并加入此类中。
修改数据时,先去修改数据库,然后修改此类中缓存的数据。

public class Data {
final private static List<User>users=new ArrayList<User>();
volatile public static int allPages;
volatile public static int allItems;//显示共有多少个数据库条目
final public static int SHOW_ITEMS_NUMBER=3;//每页显示多少条数据
final private static int ADD_PAGE_NUMBER=5;//每次数据不够时,一次性添加多少个页面的数据
private static int lastUpdate;

public synchronized List<User> getAllUsers(){
return users;
}
//当数据被修改时,可以先更新数据库,后更新缓存
public synchronized static void updateUser(int indexUser,User user){
users.set(indexUser, user);
}
//当数据被删除时,可以先更新数据库,后更新缓存中的各种相关数据
public synchronized static void deleteUser(int indexUser){
users.remove(indexUser);
allItems=allItems-1;
lastUpdate--;
allPages=(allItems%SHOW_ITEMS_NUMBER)==0?(allItems/SHOW_ITEMS_NUMBER):(allItems/SHOW_ITEMS_NUMBER+1);
}
public synchronized List<User> getUsers(int pageIndex){
if(pageIndex>allPages&&allPages!=0){
return null;
}
//保证最后一个页面有至少一条数据
if(users.size()<(pageIndex-1)*SHOW_ITEMS_NUMBER+1){
addMoreUsers(getUsersFromDBMS(pageIndex));
}
if(users.size()>=pageIndex*SHOW_ITEMS_NUMBER){
return users.subList((pageIndex-1)*SHOW_ITEMS_NUMBER,pageIndex*SHOW_ITEMS_NUMBER);
}
else{
return users.subList((pageIndex-1)*SHOW_ITEMS_NUMBER,allItems);
}
}
public synchronized void addMoreUsers(List<User>list){
users.addAll(list);
}
public static List<User> getUsersFromDBMS(int pageIndex){
Session session = HibernateUtil.getSession();
// 开启事物
Transaction tran = session.beginTransaction();
String hql = "from User";
Query query = session.createQuery(hql);
allItems=query.list().size();
allPages=(allItems%SHOW_ITEMS_NUMBER)==0?(allItems/SHOW_ITEMS_NUMBER):(allItems/SHOW_ITEMS_NUMBER+1);
query.setFirstResult((lastUpdate) * SHOW_ITEMS_NUMBER);
query.setMaxResults(SHOW_ITEMS_NUMBER*(ADD_PAGE_NUMBER+(pageIndex-lastUpdate-1)));
lastUpdate=pageIndex+ADD_PAGE_NUMBER-1;
List<User> result = query.list();
HibernateUtil.closeSession();
return result;
}
}


JSP页面中,直接获取数据并显示
<body>
<%
//得到当前页码
int pageIndex = 0;
//获取页码
String getPage = request.getParameter("pageIndex");
//判断传来的参数是否有值
if (getPage == null) {
pageIndex = 1;
} else {
//把当前页赋值给pageIndex
pageIndex = Integer.parseInt(getPage);
//判断当前页是否为最大页
}
//获取表中有多少条数据
int count ;
//得到分页数目
int pag;

Data mydata=new Data();
List<User> list = mydata.getUsers(pageIndex);
request.setAttribute("list", list);
pag=mydata.allPages;
count=mydata.allItems;

%>

<c:forEach items="${requestScope.list}" var="mind" varStatus="id">
<tr>
<td>${mind.username}</td>
<td>${mind.sex}</td>
<td>${mind.address}</td>
</tr>
</c:forEach>
<div id="fy">
<%
//判断当前页是否为末页
if (pageIndex > 1) {
%>
<a href="Mypage.jsp?pageIndex=<%=1%>"> 首页</a> <a
href="Mypage.jsp?pageIndex=<%=pageIndex - 1%>"> 上一页 </a>
<%
}
//判断当前页是否为首页
if (pageIndex < pag) {
%>
<a href="Mypage.jsp?pageIndex=<%=pageIndex + 1%>"> 下一页</a> <a
href="Mypage.jsp?pageIndex=<%=pag%>"> 末页 </a>
<%
}
%>
[<%=pageIndex%>/<%=pag%>]页
</div>

</body>




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 重庆公司核名有同名的怎么办 新电视不全屏怎么办左右有黑边 所学类别找不到音乐表演怎么办 公司口头通知不续签合同怎么办 雪纺衬衣皱了怎么办 狗打架受伤怎么办泰迪 大狗打架破了怎么办 舌头上长溃疡怎么办吃什么药 悠悠球不回弹怎么办啊 围棋遇到对方不停围堵怎么办? s围棋业余四段想提升怎么办 wps禁止创建分享链接怎么办 驾驶人开车违章不认可怎么办 京东白条退货分期服务费怎么办 新车年检标丢了怎么办 异地违章罚单丢了怎么办 异地现场违章罚单丢了怎么办 新车没有牌照过停车杆怎么办 驾照换证时间过了怎么办 杭州告知单丢了怎么办 电工证过了复审日期怎么办 大人有居住证小孩没有怎么办 异地补办身份证没有暂住证怎么办 挂科了心里难受怎么办 c1升b2考不过怎么办 b2驾照扣了1分怎么办 红绿色盲驾考怎么办 驾驶证忘带被交警查了怎么办 车子被扣45分怎么办 驾照被扣在外省交警支队怎么办 从渭南把驾照转到西安怎么办 a1a2驾驶证扣3分怎么办 车辆累计扣12分怎么办 驾照扣了40分怎么办 驾驶证扣了30分怎么办 b2驾照逾期未审怎么办 c1实习期扣6分怎么办 车子累计扣30分怎么办 实习期间扣满12分怎么办 新手驾照扣6分怎么办 a2驾驶证逾期未审验怎么办