首先需求分析
1、 如果数据足够多那先默认先生成十页 否则就生成你的总页数这么多页
2、从点击7页码开始前面的页码要随之改变 后面也是
当当前页为7时第一个页码为2 最后一个页码为11可得
从当前页-5得到开始页(7-5=2) 末尾页等于当前页+4(7+4=11)
所以当前页大于6时就要生成“当前页-5”到 “当前页+4” 这么多个页码
再如果你总页数没有你当前页+4那么多 那点击下一页生成就会有问题
3、所以前面还要判断这个条件if(totalPage(总页数)<currentPage(当前页))如果当前条件成立的话则
生成总页数减9 到 到总页数这么多
需求分析完之后就是代码
首先我用的是分页的一个插件 pageHapler
具体代码(让你更详细的了解):
var htmls="" //如果当前页大于一 生成上一页和首页 if(pageNum>1){ htmls+="<input type=button value='首页' currentPage='1' onclick='page(this)'/>" htmls+="<input type=button value='上一页' currentPage='"+prePage+"' onclick='page(this)'/>" } //如果总页数没有十页 if(pageTotal<10){ for(var i=1;i<=pageTotal;i++){ ///给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"'style='background-color:blue ' onclick='page(this)' currentPage='"+i+"' />" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } } else if(pageNum<=6){ //如果当前页<=6 for(var i=1;i<=10;i++){ ///给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"'style='background-color:blue' onclick='page(this)' currentPage='"+i+"'/>" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } //其他 }else{ //如果总页数小于当前页+4 if(pageTotal<=pageNum+4){ for(var i=pageTotal-9;i<=pageTotal;i++){ //给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"' onclick='page(this)' style='background-color:blue' currentPage='"+i+"'/>" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } //其他 }else{ for(var i=pageNum-5;i<=pageNum+4;i++){ //给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"'style='background-color:blue' onclick='page(this)' currentPage='"+i+"'/>" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } } } //如果当前页小于总页数就生成下一页和尾页 if(pageNum<pageTotal){ htmls+="<input type=button value='下一页' onclick='page(this)' currentPage='"+nextPage+"'/>" htmls+="<input type=button value='尾页' onclick='page(this)' currentPage='"+pageTotal+"'/>" } $("#userPage").html(htmls)
如何使用呢:
1、导入依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency>
2、配置文件(可以配置在spring和mybatis的一个整合xml文件中)
3、编写mapper.xml
多条件查询所以要自己编写动态sql 也可以用逆向工程生成example类中的方法
<select id="getUserByCondition" resultMap="BaseResultMap"> select * from user,role <where> user.userRole=role.id <if test="userName != null"> and userName like CONCAT("%",#{userName},"%") </if> <if test="userRole!=0 and userRole!=null"> and role.id=#{userRole} </if> </where>
4、service层
/** * 多条件分页查询 * @param userName 用户名 * @param userRole 用户角色 * @param currentPage 当前页 * @param pageSize 每页数据条数 * @return */ @Override public List<User> getUserByUserNameAndUserRole(String userName, Long userRole, Integer currentPage, Integer pageSize) { //pageHelper Page<User> page = PageHelper.startPage(currentPage, pageSize); List<User> users = userMapper.getUserByCondition(userName,userRole); //返回结果 return users; }
4、contorller层
/** * 获取所有用户并返回json格式字符串 * @param userName 用户名 * @param userRole 用户角色 * @param session * @param currentPage 当前页 * @return */ @RequestMapping("getUserList") @ResponseBody public Object getUserList(String userName, Long userRole, HttpSession session, Integer currentPage, Model model) { Map<String, Object> map = new HashMap<String, Object>(); //设置当前页 Integer curPage=1; if (currentPage != null && currentPage != 0) { curPage = (int) currentPage; } List<User> userList = userService.getUserByUserNameAndUserRole(userName, userRole, curPage, Contents.PAGESIZE); PageInfo<User> userPage=new PageInfo<User>(userList); //获取角色列表 List<Role> roles = roleService.getRoleList(); //获取当前用户 User user = (User) session.getAttribute(Contents.USER_SESSION); //放入map后通过json格式打印 //当前用户 map.put("user", user); //角色列表 map.put("roleList", roles); map.put("userPage",userPage); //用户名(条件) map.put("userName", userName); //用户角色(条件) map.put("userRole", userRole); //返回结果 return JSON.toJSONString(map); }
然后是js代码
$(function(){ var datas= {} query(datas) }) //查询 $("#query_btn").click(function () { var datas={"userName":$("#inputCity").val(),"userRole":$("#userRole").val()} query(datas) }) function query(datas) { $.post( "/jsp/user/getUserList", datas, function (data) { var pageNum=data.userPage.pageNum; var pageTotal=data.userPage.pages; var prePage=data.userPage.prePage; var nextPage=data.userPage.nextPage; /*加载用户列表*/ var htmls = ""; for (var i = 0;i< data.userPage.list.length;i++) { var gender = "" if (data.userPage.list[i].gender == 1) { gender = "男" } else { gender = "女" } htmls += "<tr><td>" + data.userPage.list[i].userCode + "</td>"; htmls += "<td>" + data.userPage.list[i].userName + "</td>"; htmls += "<td>" + gender + "</td>"; htmls += "<td>" + data.userPage.list[i].age + "</td>"; htmls += "<td>" + data.userPage.list[i].phone + "</td>"; htmls += "<td>" + data.userPage.list[i].userRoleName + "</td>"; htmls += "<td><input type=button value=查看 onclick='getUserById("+data.userPage.list[i].id +")'/></td>" htmls += "<td><input type=button value=修改 onclick='updUserById("+data.userPage.list[i].id +")'/></td>" htmls += "<td><input type=button value=删除 onclick='delUser(this,"+data.userPage.list[i].id +")'/></td></tr>" } $("#tbody").html(htmls) /** * 加载角色列表 */ var htmls = "<option value=0>选择角色</option>"; for (var i = 0; i < data.roleList.length; i++) { htmls += "<option value=" + data.roleList[i].id + ">" + data.roleList[i].roleName + "</option>" } $("#userRole").html(htmls) /*获取当前用户*/ $("#user").html(data.user.userName) //反显用户角色 var userRoleList = $("#userRole").children() for (var i = 0; i < userRoleList.length; i++) { if (userRoleList[i].value == data.userRole) { userRoleList[i].selected = "selected"; } } var htmls="" //如果当前页大于一 生成上一页和首页 if(pageNum>1){ htmls+="<input type=button value='首页' currentPage='1' onclick='page(this)'/>" htmls+="<input type=button value='上一页' currentPage='"+prePage+"' onclick='page(this)'/>" } //如果总页数没有十页 if(pageTotal<10){ for(var i=1;i<=pageTotal;i++){ ///给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"'style='background-color:blue ' onclick='page(this)' currentPage='"+i+"' />" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } } else if(pageNum<=6){ //如果当前页<=6 for(var i=1;i<=10;i++){ ///给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"'style='background-color:blue' onclick='page(this)' currentPage='"+i+"'/>" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } //其他 }else{ //如果总页数小于当前页+4 if(pageTotal<=pageNum+4){ for(var i=pageTotal-9;i<=pageTotal;i++){ //给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"' onclick='page(this)' style='background-color:blue' currentPage='"+i+"'/>" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } //其他 }else{ for(var i=pageNum-5;i<=pageNum+4;i++){ //给当前页按钮添加样式 if(pageNum==i){ htmls+="<input type='button' value='"+i+"'style='background-color:blue' onclick='page(this)' currentPage='"+i+"'/>" }else { htmls+="<input type='button' value='"+i+"' onclick='page(this)' currentPage='"+i+"'/>" } } } } //如果当前页小于总页数就生成下一页和尾页 if(pageNum<pageTotal){ htmls+="<input type=button value='下一页' onclick='page(this)' currentPage='"+nextPage+"'/>" htmls+="<input type=button value='尾页' onclick='page(this)' currentPage='"+pageTotal+"'/>" } $("#userPage").html(htmls) }, "json" ) } //分页查询 function page(ts){ var curPage=$(ts).attr('currentPage') datas={"currentPage":curPage,"userName":$("#inputCity").val(),"userRole":$("#userRole").val()} query(datas) }
记得之前项目答辩我最不会的就是分页 经过一段时间的学习我还是学会了分页一开始是自己写page的工具类
大致了解了分页的原理 随后使用pageHepler大大的减轻了我们的编码量 这是我课堂的一次作业 然后分享给大家
如果喜欢呢 可以点个关注 持续更新哦~