/** * Copyright (c) 2011-2014, hubin (jobob@qq.com). * <p> * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.baomidou.mybatisplus.plugins.pagination; import java.io.Serializable; import org.apache.ibatis.session.RowBounds; import com.baomidou.mybatisplus.toolkit.StringUtils; /** * <p> * 简单分页模型 * </p> * 用户可以通过继承 org.apache.ibatis.session.RowBounds实现自己的分页模型<br> * 注意:插件仅支持RowBounds及其子类作为分页参数 * * @author hubin * @Date 2016-01-23 */ public class Pagination extends RowBounds implements Serializable { private static final long serialVersionUID = 1L; /* 总数 */ private int total; /* 每页显示条数,默认 10 */ private int size = 10; /* 总页数 */ private int pages; /* 当前页 */ private int current = 1; /* 查询总记录数(默认 true) */ private boolean searchCount = true; /** * 开启排序(默认 true) 只在代码逻辑判断 并不截取sql分析 * * @see com.baomidou.mybatisplus.mapper.SqlHelper fillWrapper **/ private boolean openSort = true; /** * 查询总数优化(默认 false 该属性只针对于Optimize.DEFAULT有效) * * @see com.baomidou.mybatisplus.enums.Optimize * */ private boolean optimizeCount = false; /** * <p> * SQL 排序 ORDER BY 字段,例如: id DESC(根据id倒序查询) * </p> * <p> * DESC 表示按倒序排序(即:从大到小排序)<br> * ASC 表示按正序排序(即:从小到大排序) * </p> */ private String orderByField; /** * 是否为升序 ASC( 默认: true ) */ private boolean isAsc = true; public Pagination() { super(); } /** * <p> * 分页构造函数 * </p> * * @param current * 当前页 * @param size * 每页显示条数 */ public Pagination(int current, int size) { this(current, size, true); } public Pagination(int current, int size, boolean searchCount) { this(current, size, searchCount, true); } public Pagination(int current, int size, boolean searchCount, boolean openSort) { super(offsetCurrent(current, size), size); if (current > 1) { this.current = current; } this.size = size; this.searchCount = searchCount; this.openSort = openSort; } protected static int offsetCurrent(int current, int size) { if (current > 0) { return (current - 1) * size; } return 0; } public int getOffsetCurrent() { return offsetCurrent(this.current, this.size); } public boolean hasPrevious() { return this.current > 1; } public boolean hasNext() { return this.current < this.pages; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getPages() { if (this.size == 0) { return 0; } this.pages = this.total / this.size; if (this.total % this.size != 0) { this.pages++; } return this.pages; } public int getCurrent() { return current; } public void setCurrent(int current) { this.current = current; } public boolean isSearchCount() { return searchCount; } public void setSearchCount(boolean searchCount) { this.searchCount = searchCount; } public boolean isOptimizeCount() { return optimizeCount; } public void setOptimizeCount(boolean optimizeCount) { this.optimizeCount = optimizeCount; } public String getOrderByField() { return orderByField; } public void setOrderByField(String orderByField) { if (StringUtils.isNotEmpty(orderByField)) { this.orderByField = orderByField; } } public boolean isOpenSort() { return openSort; } public void setOpenSort(boolean openSort) { this.openSort = openSort; } public boolean isAsc() { return isAsc; } public void setAsc(boolean isAsc) { this.isAsc = isAsc; } @Override public String toString() { return "Pagination { total=" + total + " ,size=" + size + " ,pages=" + pages + " ,current=" + current + " }"; } }