今天帮别人改项目的时候,突然发现别人做的项目整个数据查询出来回显给前台看着怪怪的,总感觉少了点什么。
仔细和之前做过的项目对比后发现回显数据并没有做分页。而且他的小项目并没有引入像simplePaging那样的jquery前端插件。故此开一篇关于分页功能的文章希望对别人能起到给予思路的功能。
分页逻辑浅析
为什么我们要用分页?答:因为当内部数据过多的时候,如果全在一页显示,人们看着不免困倦,页面也不够美观。而解决方法也就此出现了–分页。
我们就来单纯的讲讲逻辑。简单的想,我们首先设计的时候想一页我们要显示多少条数据,这里以我这手头的举例,管理员显示用户每页十位,这里就有两种方法。
- 一次性从后台将数据全部打包封装好传给前面,让前面根据你的从0到9以此展示,每一页的上一页下一页按键负责操作这个0到9的循环里的初始位置。
- 每次根据你当前的页码,返回页码给后台让后台查询相应位置的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。
然后作为一个萌新,肯定还有很多不足的地方。也有很多更优解我没想到,这里只是提供一下我个人的想法,如果能对你有所帮助我就很开心啦:)