controller层;
@RequestMapping("/getPageData")
@ResponseBody
public Page<Electronic> getPageData(HttpServletRequest request) {
//List<Electronic> electronic=new List<Electronic>();
Map<String, Object> record = HttpUtils.getRequestMap(request);
// LicenceMaintServiceImpl.getPageDate();
return LicenceMaintServiceImpl.getPageDate(request) ;
}
service层:
public Page<Electronic> getPageDate(HttpServletRequest request) {
/*
注释的代码为大数据量用的快速分页方法
List<Map> list = new ArrayList<Map>();
Map map = new HashMap();
map.put(WHERE_KEY, "certificate_name");
map.put(WHERE_VALUE, "证照名称");
list.add(map);
BasicDBObject totalCon =new BasicDBObject();
int i=1;
totalCon.put("_id", new BasicDBObject(QueryOperators.GT, i));
BasicDBObject fields =new BasicDBObject();
fields.put("_id",true);
fields.put("certificate_name",true);
fields.put("catalog_id",true);
List<Electronic> largeList= MongoUtils.toVo(LicenceMaintMapper.largePageList(0,100,"ELECTRONIC_CERTIFICATE",totalCon,fields),Electronic.class);*/
Query query =new Query();
Page<Electronic> page =new Page<Electronic>(request);
return LicenceMaintMapper.findPage(page,query,"ELECTRONIC_CERTIFICATE");
}
mapper 分页查询:
/** /**
* @description: 分页查询
* @param query:条件,collectionName:集合名
* @return ${return_type}
* @throws
* @author lizz
* @date 2019/7/9 20:41
*/
public Page<T> findPage(Page<T> page, Query query, String collectionName){
long count = this.count(query, collectionName);
page.setTotal(count);
int pageNumber = page.getPagenumber();
int pageSize = page.getPageSize();
// query.skip((pageNumber - 1) * pageSize).limit(pageSize);
query.skip((pageNumber)).limit(pageSize);
List<T> rows = this.find(query, collectionName);
page.setLength(pageSize);
page.setData(rows);
page.setRecordsTotal(count); // 设置从多少条记录中检索
page.setRecordsFiltered(count); // 设置总共多少条
return page;
}
封装的实体类:用于前端的datatable交互
package com.sdyy.common.mongodb.page;
import com.sdyy.common.page.Columns;
import com.sdyy.common.page.OrderBy;
import com.sdyy.common.page.Search;
import com.sdyy.common.utils.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/** /**
* @description: mongo分页实体类
* @param ${tags}
* @return ${return_type}
* @throws
* @author lizz
* @date 2019/7/10 15:59
*/
public class Page<T>{
private int start;
private int length;
private String search;
private long total;
private List<T> data;
private long recordsTotal;
private long recordsFiltered;
private int pageSize;
private int pagenumber;
private List<Columns> columns = new ArrayList<Columns>();
public long getRecordsTotal() {
return recordsTotal;
}
public void setRecordsTotal(long recordsTotal) {
this.recordsTotal = recordsTotal;
}
public long getRecordsFiltered() {
return recordsFiltered;
}
public void setRecordsFiltered(long recordsFiltered) {
this.recordsFiltered = recordsFiltered;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public List<Columns> getColumns() {
return columns;
}
public void setColumns(List<Columns> columns) {
this.columns = columns;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
/**
* @return the pageSize
*/
public int getPageSize() {
return pageSize;
}
/**
* @param pageSize the pageSize to set
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* @return the pagenumber
*/
public int getPagenumber() {
return pagenumber;
}
/**
* @param pagenumber the pagenumber to set
*/
public void setPagenumber(int pagenumber) {
this.pagenumber = pagenumber;
}
/**
* @return the total
*/
public long getTotal() {
return total;
}
/**
* @param total the total to set
*/
public void setTotal(long total) {
this.total = total;
}
public Page(HttpServletRequest request) {
this.start = StringUtils.getIntValue(request.getParameter("start"));
this.length = StringUtils.getIntValue(request.getParameter("length"));
this.pagenumber=this.start;
this.pageSize=this.length;
Search s = new Search();
s.setValue(request.getParameter("search[value]"));
s.setRegex(Boolean.getBoolean(request.getParameter("search[regex]")));
//this.search = s;
int i = 0;
while (request.getParameter("columns[" + i + "][data]") != null) {
Columns c = new Columns();
c.setData(request.getParameter("columns[" + i + "][data]"));
c.setName(request.getParameter("columns[" + i + "][name]"));
c.setSearchable(StringUtils.getBoolean(request.getParameter("columns[" + i + "][searchable]")));
c.setOrderable(StringUtils.getBoolean(request.getParameter("columns[" + i + "][orderable]")));
// search暂时用不到
columns.add(c);
i++;
}
i = 0;
while (request.getParameter("order[" + i + "][column]") != null) {
/***
* 2018/05/04升级,增加使用对象时,datatable可以进行排序功能
*/
String column = null;
OrderBy o = new OrderBy();
String orderColumnSNum = request.getParameter("order[" + i + "][column]");
int orderColumn = StringUtils.getIntValue(orderColumnSNum);
column = columns.get(orderColumn).getName();
if(StringUtils.isEmpty(column)) {
column = columns.get(orderColumn).getData();
}
o.setColumn(column);
o.setDir(request.getParameter("order[" + i + "][dir]"));
//order.add(o);
i++;
}
}
}
前端jsp:
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@ include file="…/…/…/common/form_editor_header.jsp"%>
ps:
大数据量分页
采用的是用前一次查询的id作为条件 省去了skip时间
参考:
https://blog.csdn.net/heihu_malice7/article/details/78958916
https://www.cnblogs.com/qingming/p/6419474.html
/** /**
* @description: 大数据量分页
* @param ${tags}
* @return ${return_type}
* @throws
* @author lizz
* @date 2019/7/10 11:25
*/
public DBCursor largePageList(int page, int pageSize, String collectionName, BasicDBObject totalCon, BasicDBObject fields) {
try {
return mongoTemplate.getCollection(collectionName).find(totalCon,fields).sort(new BasicDBObject("_id", 1)).limit(pageSize);
} catch (Exception e) {
logger.error("***大数据量数据分页查询失败,collectionName=" + collectionName+e.getCause().getMessage());
}
return null;
}
DBCursor转换实体类工具:
/**
* @author li
* @title: MongoUtils
* @projectName licence
* @description: TODO
* @date 2019/7/1011:40
*/
public class MongoUtils {
/* /**
* @description: 强转list<T>
* @param ${tags}
* @return ${return_type}
* @throws
* @author lizz
* @date 2019/7/10 11:40
*/
public static <T> List<T> toVo(DBCursor dc, Class<T> c) {
List<T> list = new ArrayList<>();
while (dc.hasNext()) {
DBObject dbObj = dc.next();
T t = (T) dbObj;
list.add(t);
}
return list;
}
}