今天帮别人改项目的时候,突然发现别人做的项目整个数据查询出来回显给前台看着怪怪的,总感觉少了点什么。
仔细和之前做过的项目对比后发现回显数据并没有做分页。而且他的小项目并没有引入像simplePaging那样的jquery前端插件。故此开一篇关于分页功能的文章希望对别人能起到给予思路的功能。

分页逻辑浅析

为什么我们要用分页?答:因为当内部数据过多的时候,如果全在一页显示,人们看着不免困倦,页面也不够美观。而解决方法也就此出现了–分页
我们就来单纯的讲讲逻辑。简单的想,我们首先设计的时候想一页我们要显示多少条数据,这里以我这手头的举例,管理员显示用户每页十位,这里就有两种方法。

  1. 一次性从后台将数据全部打包封装好传给前面,让前面根据你的从0到9以此展示,每一页的上一页下一页按键负责操作这个0到9的循环里的初始位置。
  2. 每次根据你当前的页码,返回页码给后台让后台查询相应位置的0到9条数据,再回显给前台。
    这两种方法各有优劣势,前者可以减少多次访问数据库的访问压力,后者能每次读取少量数据,减少缓存内部使用。
    然后我使用的是第二种,第一种可以根据上面的思路编写代码,而且仅写js部分就行。这里贴一下第二种实现方法的代码。

Controller层代码:

/**
     * 管理员分页显示所有用户
     * ------测试通过
     * 
     * @return
     * @author: admin
     */
    @ResponseBody
    @RequestMapping(value = "getPageUser.action", method = RequestMethod.POST)
    public Object getPageUser(HttpServletRequest req) {
        JSONObject jsonObject = new JSONObject();
        //这是对整张表中用户数量/每页数量向上取整给于前端的总页数
        jsonObject.put("total", (int) Math.ceil((double) userService.countUser() / 10));
        //因为数据中第一页存放的其实是0-9的顺序,所以起始位要-1再乘10
        jsonObject.put("userList", userService.getPageUser((Integer.parseInt(req.getParameter("page")) - 1) * 10));
        return jsonObject;
    }

Mapper.xml部分代码:(用limit控制输出多少条以及从哪儿开始)

<select id="getPageUser" resultMap="BaseResultMap" parameterType="java.lang.Integer">
    select
    *
    from user
    limit #{num,jdbcType=INTEGER},10
  </select>

Service层想必大家都会,就是把Controller给的参数传给dao层。然后就是关于js部分的分页实施,我用了一个别人写好的jquery插件,初始化的时候给予总页码和当前页码即可。效果图这里我贴出来,具体代码我就不贴了,有需要这个分页插件的可以联系我的邮箱tzysz1997@163.com。

java 服务端分页 javaweb分页功能_分页


然后作为一个萌新,肯定还有很多不足的地方。也有很多更优解我没想到,这里只是提供一下我个人的想法,如果能对你有所帮助我就很开心啦:)