实现分页查询
实体类
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>
页面效果(未实现居中处理)