实现分页查询

实体类

package com.approval.bean;

import java.io.Serializable;
import java.util.List;

import org.apache.poi.ss.formula.functions.T;

public class Page<T> implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	//每页显示多少条:默认10条
	private int pageSize = 10;
	//总页数
	private int pageTotal;
	//当前第多少页:默认第1页
	private int pageNum = 1;
	//总共多少条
	private int totalCount;
	//要显示的数据
	private List<T> dataList;
	
	//分页方法
	public Page(int pageNumumber, int pageSize, List<T> sourceList){
        if(sourceList == null || sourceList.isEmpty()){
            return;
        }

        // 总记录条数
        this.totalCount = sourceList.size();

        // 每页显示多少条记录
        this.pageSize = pageSize;

        //获取总页数
        this.pageTotal = this.totalCount / this.pageSize;
        if(this.totalCount % this.pageSize !=0){
            this.pageTotal = this.pageTotal + 1;
        }
        
        // 当前第几页数据
        this.pageNum = this.pageTotal < pageNum ?  this.pageTotal : pageNum;

        // 起始索引
        int fromIndex   = this.pageSize * (this.pageNum -1);

        // 结束索引
        int toIndex  = this.pageSize * this.pageNum > this.totalCount ? this.totalCount : this.pageSize * this.pageNum;

        this.dataList = sourceList.subList(fromIndex, toIndex);
    }

    public Page(){

    }

    public Page(int pageSize,int pageNum,int totalCount,int pageTotal,List<T> dataList) {
        super();
        this.pageSize = pageSize;
        this.pageNum = pageNum;
        this.totalCount = totalCount;
        this.pageTotal = pageTotal;
        this.dataList = dataList;
    }

	
	public int getPageSize() {
		return pageSize;
	}
	
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	
	public int getPageTotal() {
		return pageTotal;
	}
	
	public void setPageTotal(int pageTotal) {
		this.pageTotal = pageTotal;
	}
	
	public int getPageNum() {
		return pageNum;
	}
	
	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}
	
	public int getTotalCount() {
		return totalCount;
	}
	
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	
	public List<T> getDataList() {
		return dataList;
	}
	
	public void setDataList(List<T> dataList) {
		this.dataList = dataList;
	}
}

配置.xml文件:UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.approval.mapper.UserMapper">
     <resultMap id="BaseResultMap" type="com.approval.bean.User">
		<id column="user_id" property="userId" jdbcType="INTEGER" />
		<result column="user_code" property="userCode" jdbcType="VARCHAR" />
		<result column="user_name" property="userName" jdbcType="VARCHAR" />
		<result column="user_pwd"  property="userPwd" jdbcType="VARCHAR" />
		<result column="role_id"  property="roleId" jdbcType="INTEGER" />
		<result column="user_image"  property="userImage" jdbcType="VARCHAR" />
		<result column="status"  property="status" jdbcType="VARCHAR" />
	</resultMap>

    <!-- 获取分页总记录数 -->
  <select id="getPageCount" resultType="int">
    SELECT count(*) FROM user 
  </select>

   <!-- 分页 -->
  <select id="findPagePrerequisite" resultMap="BaseResultMap">
    SELECT * FROM 
    	user 
    LIMIT 
     	#{pageNum},#{pageSize}  
  </select>
</mapper>

mapper接口:UserMapper

package com.approval.mapper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.approval.bean.User;

@Mapper
public interface UserMapper {
    /**
     * 分页
     */
    List<User> findPagePrerequisite(HashMap<String,Object> map);
    
    /**
     * 模糊查询
     */
    List<User> findByName(Map<String,Object> map);

}

Service接口:UserService

package com.approval.service;

import java.util.List;
import java.util.Map;

import com.approval.bean.Page;
import com.approval.bean.User;

public interface UserService {
	 /**
     * 获取总记录条数
     */
    int getPageCountService(User user);

    /**
     * 分页
     */
    Page<User> findPagePrerequisiteService(User user,int pageNum, int pageSize);
}

实现类:UserServiceImpl

package com.approval.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.approval.bean.Page;
import com.approval.bean.User;
import com.approval.mapper.UserMapper;
import com.approval.service.UserService;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 获取分页总条数
     */
    public int getPageCountService(User user) {
        int pageCount = userMapper.getPageCount(user);
        return pageCount;
    }
    /**
     * 分页
     */
    public Page<User> findPagePrerequisiteService(User user,int pageNum,int pageSize) {

         HashMap<String,Object> map = new HashMap<String,Object>();
         Page<User> page = new Page<User>();
         
         //当前页
         page.setPageNum(pageNum);
         
         //封装总记录数
         int getCount = userMapper.getPageCount(user);
         page.setTotalCount(getCount);
         
         //封装查询条件
         map.put("username", user.getUserName());
         
         //分页
         map.put("pageNum", page.getPageNum());
         map.put("pageSize", pageSize);
         
         //封装每页显示的数据,调用分页方法,传map值
         List<User> fileList = userMapper.findPagePrerequisite(map);
         page.setDataList(fileList);
         
        return page;
    }
}

controller层:PageController

package com.approval.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.approval.bean.Page;
import com.approval.bean.User;
import com.approval.service.UserService;

@Controller
@RequestMapping("/usercont")
public class PageController {

    @Autowired
    private UserService userService;
    
    

    /**
     * 获取总记录条数
     */
    @RequestMapping("/getPageCount")
    @ResponseBody
    public int getPageCount(User users) {
        int count = userService.getPageCountService(users);
        return count;
    }


    /**
     * 分页
     */
    
    //前端->请求页面
    @RequestMapping("/page")
    public ModelAndView findPagePrerequController(User users, Integer pageNum, Integer pageSize){
    	ModelAndView mav = new ModelAndView();
    	mav.setViewName("pagemanager");
    	return mav;
    }
    
    //ajax获取数据返回至页面
    @RequestMapping("/pages")
    @ResponseBody
    public Map<String, Object> findPagePrerequController(User users, Integer pageNum, Integer pageSize,Integer draw){
    	
    	Page<User> page = new Page<User>();
    	page = userService.findPagePrerequisiteService(users,pageNum,pageSize);
        
        Map<String,Object> map = new HashMap<String,Object>();
      //保证后端代码里面的参数与前端页面部分对应
        map.put("draw",draw);
        map.put("recordsTotal",page.getTotalCount());
        map.put("recordsFiltered",page.getTotalCount());
        map.put("data",page.getDataList());
        
        return map;
}

按需求制作前端页面(这里只使用html页面查看显示效果)

<!DOCTYPE html>
	<html>
		<head>
			<meta charset="UTF-8">
			<title></title>
			<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
			<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js" ></script>
			<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js" type="text/javascript"></script>
		</head>
		<body>
			
			<div class="table-responsive col-lg-10 col-lg-offset-1">
			  <table id="table_id" class="table table-bordered table-hover dataTable">
			    <thead>
			        <tr>
			        	<th class="text-center">序号</th>
			            <th class="text-center">账号</th>
					    <th class="text-center">用户名</th>
					    <th class="text-center">密码</th>
						<th class="text-center">操作</th>
			        </tr>
			    </thead>
			    <tbody>
			    </tbody>
			  </table>
			</div>
			
			<script type="text/javascript">
			//菜单栏高亮控制//传入ID
			//menuActive("role_manager");


			var datatables_options = {
			    	language : {
			    		"lengthMenu" : '每页显示<select class="form-control input-xsmall">' + '<option value="10">10</option>'
												+ '<option value="20">20</option>'
												+ '<option value="30">30</option>'
												+ '<option value="40">40</option>'
												+ '<option value="50">50</option>' + '</select>条',
			    		"paginate" : {
			    			
			    							"pageNum" : 1,
			    							"pageSize":"10",
			    							
											"first" : "首页",
											"last" : "尾页",
											"previous" : "上一页",
											"next" : "下一页"
										},
						"processing" : "加载中...",  //DataTables载入数据时,是否显示‘进度’提示  
						"emptyTable" : "暂无数据",
						"info" : "共 _PAGES_ 页  _TOTAL_ 条数据  ",
						"infoEmpty" : "暂无数据",
						"emptyTable" : "暂无要处理的数据...",  //表格中无数据
						"search": "搜索:",
						"infoFiltered" : " —— 从  _MAX_ 条数据中筛选",
						"zeroRecords":    "没有找到记录"
										
			    	},
//			    	drawCallback : function(settings) {
//						//initCheckBox();
//					},
			        ordering:  false,//排序显示控制
			        searching : false,
			        paging: true,//开启分页
			    	processing : true,
			    	serverSide : true,//是否开启服务器模式
			    	ajax : {
						        url: '/usercont/pages',
						        type: 'post',
						        //cache: false,  
						        data : function(d){
						        	///var book = getParam(d);
						        	
						        var  bookName = $("#searchText").val();	
						        var author = $("#search_book_author").val();
						        	
						        var sysRole = {};	
								sysRole.userName = bookName;
								
								
								sysRole.pageSize = d.length;
								sysRole.draw = d.draw;
								sysRole.pageNum = d.start;
								
								return sysRole;
						        },
						        dataFilter : function(json){
						        	//后台返回字段不同于前台,使用此属性进行修改
						        	console.log(json)
						        	json = JSON.parse(json);
						        	
						        	console.log(json.draw)
						        	console.log(json.recordsTotal)
						        	console.log(json.recordsFiltered)
						        	console.log(json.data)
						        	
						        	var returnData = {};
						        	returnData.draw = json.draw;
						        	returnData.recordsTotal = json.recordsTotal;  //返回数据全部记录
						        	returnData.recordsFiltered = json.recordsFiltered;  //后台不实现过滤功能,每次查询均视作全部结果
						        	returnData.data = json.data;  //返回的数据列表
						        	return JSON.stringify(returnData); //这几个参数都是datatable需要的,必须要
						        	
						        }
						    },	
			    	columns: [
			    	    {
					        "data" : null,
					        "orderable" : false,
					        "sClass": "text-center"
					    },
			    	    {
					        "data": "userCode",
					        "name" : "code",
					        "orderable" : true,
					        "sDefaultContent":"",  //默认空字符串
					        "sClass": "text-center"
					    },
					    {
							"orderable" : false,
							"data": "userName",	        	
							'sClass': "text-center"	 	         	       	
						},
						{
							"orderable" : false,
							"data": "userPwd",	        	
							'sClass': "text-center"	 	         	       	
						},
						{
											// 定义操作列,######以下是重点########
											"orderable" : false,
											"targets" : 3,//操作按钮目标列
											"data" : null,
											"sWidth" :"250px",
											'sClass': "text-center",
											"render" : function(data, type,row,meta) {
														var id = '"' + row.userCode + '"';
			//var html = "<a href='show(id)'  class='delete btn btn-default btn-xs'  ><i class='fa fa-times'></i> 查看</a>"  
			var html = "";
			html += "<a href='/role/edit/"+row.userCode+ "' style='margin-right:10px;' class='up btn btn-warning '><i class='fa fa-arrow-up'></i><i class='icon-edit'></i>编辑</a>"
			html += "<a href='javascript:void(0);'   'deleteData("+id+ ")'  class='down btn btn-danger '><i class='fa fa-arrow-down'></i><i class='icon-trash'></i> 删除</a>"
											return html;
																				}
						}
			    	            ],
			    	    fnDrawCallback :function () {
					        let api = this.api();
					        let startIndex = api.context[0]._iDisplayStart;//获取本页开始的条数
					        api.column(0).nodes().each(function(cell, i) {
					            cell.innerHTML = startIndex + i + 1;
					        });
					    }
			  };
			var firstTable;
				firstTable = $('#table_id').DataTable(datatables_options);
			</script>
		</body>
	</html>

页面效果(未实现居中处理)
SpringMVC+Mybatis实现分页

相关文章: