分页的第四种方式

是假分页

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

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>




发布了334 篇原创文章 · 获赞 37 · 访问量 30万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览