为了账号安全,请及时绑定邮箱和手机立即绑定

基于后端JFinal框架手动分页

标签:
Java

之前项目做的数据分页处理都是直接调用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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消