JSP + laypage分页完整案例

之前用过datatables进行过分页,尽管其功能非常完善,但是代码稍嫌复杂,样式不是很美观,不经意间发现了laypage分页插件,其对于不进行排序、模糊查询的分页代码书写非常人性化,特此记录。

1.效果图

2.html页面

district.html



    
    
    
    laypage 分页
    
    



did dname cname pname postcode areacode orderid

3.servlet页面

DistrictServlet.java
package com.XXX.servlet;

import com.XXX.dao.DistrictViewDao;
import com.XXX.pager.Pager;
import com.XXX.pojo.DistrictView;
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import org.apache.commons.lang.math.NumberUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet(name = "${Entity_Name}", urlPatterns = "/${Entity_Name}")
public class DistrictServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //request.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");

        System.out.println("开始查询数据...");
        // 1.获得页面数据
        Integer curr = NumberUtils.createInteger(request.getParameter("curr"));// 当前页
        Integer limit = NumberUtils.createInteger(request.getParameter("limit"));// 条数

        DistrictViewDao dao = new DistrictViewDao();
        // 2.查询数据库
        // 2.1 查询总记录数
        int total = dao.getTotal();
        // 2.2 查询分页数据
        List data = dao.find(curr,limit);

        Pager pager = new Pager();
        // 3.封装分页类对象
        pager.setCurr(curr);
        pager.setLimit(limit);
        pager.setTotal(total);
        pager.setData(data);

        // 4.转换为json格式数据
        JSON json = JSONSerializer.toJSON(pager);

        PrintWriter out = response.getWriter();
        // 4.响应给客户端
        out.println(json.toString());

        out.flush();
        out.close();
    }
}

4.dao层

DistrictViewDao.java
package com.XXX.dao;

import com.XXX.pojo.DistrictView;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class DistrictViewDao {
    /**
     * 获得总记录数
     *
     * @return 总记录数
     */
    public int getTotal(){
        int total = 0;
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisSessionFactory.getSessionFactory().openSession();
            DistrictViewMapper mapper = sqlSession.getMapper(DistrictViewMapper.class);
            total = mapper.getTotal();
        } finally {
            sqlSession.close();
        }
        return total;
    }

    /**
     * 查询分页数据
     *
     * @param start 查询页码
     * @param limit 每页记录数
     * @return 分页数据
     */
    public List find(int start,int limit){
        List list = null;
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisSessionFactory.getSessionFactory().openSession();
            DistrictViewMapper mapper = sqlSession.getMapper(DistrictViewMapper.class);
            start = (start-1)*limit;
            list = mapper.find(start,limit);
        } finally {
            sqlSession.close();
        }
        return list;
    }
}

5.其他

Pager.java
package com.XXX.pager;

import java.util.List;

/**
 * 分页封装类
 *
 * @param 
 */
public class Pager {
    // 当前页
    private Integer curr;
    // 每页条数
    private Integer limit;
    // 总记录数
    private Integer total;
    // 分页数据
    List data;

    public Pager() {
    }

    // getter/setter....
}
DistrictView.java
package com.XXX.pojo;

/**
 * 区县表视图类
 */
public class DistrictView {
    //did	dname	cname	pname	postcode	areacode	orderid
    private Integer did;
    private String dname;
    private String cname;
    private String pname;
    private String postcode;
    private String areacode;
    private Integer orderid;

    public DistrictView() {
    }

    // getter/setter....
}


2019-01-28 补充更新

入行一年多,再回过来看以前的代码,有点感慨,自认为当时学习还是比较刻苦,现在看来写的代码还是很多问题。这次整理博客,本想着删掉原稿修改后重新发布,再想想,还是留个记录吧,说不定哪天就写不动代码了,做个念想。

layui中的分页组件,仔细看了API,发现还是比较适合做前端分页,做后端分页的话就涉及到了一个异步渲染的问题,在此之前我是采用的async:false这个取巧的方式来锁定浏览器以达到先拿到数据再渲染分页功能的效果,实际开发中,这是行不通的,锁定该请求在一定程度上就会阻塞其他请求,导致浏览器渲染效率的降低,在此根据ES6的Promise函数对原稿进行重写。

(1)服务器分页

db-pager-demo.html



    
    
    
    laypage 服务器分页
    
    



did dname cname pname postcode areacode orderid

(2)前端分页

web-pager-demo.html



    
    
    
    laypage 前端分页
    
    



did dname cname pname postcode areacode orderid

PS:有兴趣的朋友可以考虑下载新修demo完整代码,附上结构图及链接:

JSP + laypage分页完整案例_第1张图片

https://download.csdn.net/download/zhengvipin/10942565

你可能感兴趣的:(分页,JSP,laypage,分页)