之前项目做的数据分页处理都是直接调用Hibernate,MyBatis的分页插件和自带的分页处理,这一次我想自己写分页类和分页逻辑,后端用的是JFinal框架,做个笔记记录一下:
1. 首先看一下分页类:Page<T>
的代码:
public class Page<T> {
private int currentPage; //当前页数
private int totalPage; //总页数
private int total; //总记录数
private int pageSize; //每页记录数
public int nextPage; //下一页
private int prePage; //上一页
private List<T> pageList; //当前页数据
public Page() {
}
public Page(int currentPage, int pageSize) {
this.currentPage = currentPage;
this.pageSize = pageSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
if (total % pageSize == 0) {
return total / pageSize;
}
return total / pageSize + 1;
}
public int getNextPage() {
if (currentPage < getTotalPage()) {
nextPage = currentPage + 1;
} else {
nextPage = currentPage;
}
return nextPage;
}
public int getPrePage() {
if (currentPage > 1) {
prePage = currentPage - 1;
} else {
prePage = currentPage;
}
return prePage;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public List<T> getPageList() {
return pageList;
}
public void setPageList(List<T> pageList) {
this.pageList = pageList;
}
}
2. 接着我们来看一下Service层获取分页数据的处理:
public class TestService {
private static final Test testDao = new Test().dao();
public Page<Test> getPageList(int pageNum, String keyWord) {
Page<Test> testList = new Page<Test>();
int total = testDao.find("select * from test").size();
testList.setTotal(total); //总记录数
testList.setPageSize(5); //每一页数据
testList.setCurrentPage(pageNum); //查询页数
int beginNum = (pageNum - 1) * 5; //开始记录数
String userName = "'%" + keyWord + "%'";
//调用JFinal框架封装的查询方法
List<Test> pageList = testDao.find("select * from test where name like " + userName + " limit ?, ?", beginNum, 5);
testList.setPageList(pageList);
return testList;
}
}
3. 然后就是Controller层的返回数据的方法:
public class TestController extends Controller {
static TestService testService = new TestService();
//分页查询
public void pageList() {
//getPara()方法接收前端的查询参数,没有查询关键字默认为空字符串
String keyWord = getPara("keyWord", "");
//getParaToInt()方法接收前端int类型的页数,没有则默认为第一页
int pageNum = getParaToInt("pageNum", 1);
Page<Test> testList = testService.getPageList(pageNum, keyWord);
//setAttr方法是JFinal框架封装的传递参数给前端的方法,底层实现是 request.setAttribute(name, value)
//这里还要返回搜索的关键字给前端,要保留关键字在输入框里面
setAttr("keyWord", keyWord);
setAttr("testList", testList);
//返回视图
render("testList.html");
}
}
4. 最后就是展示数据的HTML的页面了:
<form action="/test/pageList" method="post">
<input type="text" name="keyWord" value="#(keyWord)" />
<input type="submit" value="查询" />
</form>
<table id="table" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>地址</td>
</tr>
#for(test : testList.pageList)
<tr>
<td>#(test.name)</td>
<td>#(test.age)</td>
<td>#(test.address)</td>
</tr>
#end
</table>
<p>
每页显示#(testList.pageSize)条记录,共#(testList.total)条记录,当前第#(testList.currentPage)页
<a href="/test/pageList?pageNum=1&keyWord=#(keyWord)">首页</a>
<a href="/test/pageList?pageNum=#(testList.prePage)&keyWord=#(keyWord)">前一页</a>
<a href="/test/pageList?pageNum=#(testList.nextPage)&keyWord=#(keyWord)">下一页</a>
<a href="/test/pageList?pageNum=#(testList.totalPage)&keyWord=#(keyWord)">尾页</a></td>
</p>
5. 最后就大功告成了,这个分页的逻辑和思路应该是很清晰得了!
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦