自己写的分页实体类

本文介绍了一个名为Pager的分页组件的设计与实现细节,该组件支持多种分页参数配置,如每页显示记录数、当前页码、排序字段等,并提供了与jquery dataTables控件兼容的额外参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Pager implements Serializable {

 

private static final long serialVersionUID = 2626338020642050199L;

 

/** 升序 */

public static final String ASC = "ASC";

/** 降序 */

public static final String DESC = "DESC";

/** 当前页码数,默认当前页为第一页*/

private int pageNo; 

/** 总页数 */

private int totalPage; 

/** 每页显示记录数,可选范围:1-100,不指定并且需要分页时默认为100. */

private int pageSize; 

/** 总记录数 */

private int totalCount;

/** 当前页记录数 */

private int count; 

/** 排序字段 */

private String sort; 

/** 排序类型(升序asc/降序desc,默认为升序) */

private String sortType = ASC;

 

//   jquery databale控件分页专用参数

/** 请求次数 */

private Integer draw;

/** 当前起始位置 */

private Integer start;

/** 页面显示记录数量 */

private Integer length;

/** search[value]: search输入框中的值,search[regex]搜索是否支持正则 */

private Map<String, String> search;

/** order[0][column]: 表示第几列需要排序,order[0][dir]: 排序方式ASC | DESC */

private List<Map<String, String>> order;

 

public Pager() {

setPageSize(100);

setPageNo(1);

}

 

 

/**

* 默认当前页为第一页

* @param pageSize 每页显示记录数

*/

public Pager(final int pageSize) {

setPageSize(pageSize);

setPageNo(1);

}

 

/**

* @param pageSize 每页显示记录数

* @param pageNo当前页码数

*/

public Pager(final int pageSize, final int pageNo) {

setPageSize(pageSize);

setPageNo(pageNo);

}

 

/**

* 获取当前页

* @return pageNo 当前页参数变量

*/

public int getPageNo() {

return pageNo;

}

 

/**

* 设置当前页

* @param pageNo 当前页参数变量

*/

public void setPageNo(final int pageNo) {

this.pageNo = pageNo;

if (pageNo < 1) {

this.pageNo = 1;

}

 

 

/**

* 获取每页显示记录数

* @return pageSize 每页显示记录数

*/

public int getPageSize() {

return pageSize;

}

 

/**

* 设置每页显示记录数,可选范围:1-100,不指定并且需要分页时默认为100。

* @param pageSize 每页显示记录数

*/

public void setPageSize(final int pageSize) {

this.pageSize = pageSize;

if (pageSize < 1) {

this.pageSize = 1;

}else if (pageSize>100) {

this.pageSize = 100;

}

}

 

/**

* 获取总记录数

* @return totalCount 总记录数

*/

public int getTotalCount() {

return totalCount;

}

 

/**

* 设置总记录数

* @param totalCount 总记录数

*/

public void setTotalCount(final int totalCount) {

this.totalCount = totalCount;

}

 

/**

* 获取当前页记录数

* @return count 当前页记录数

*/

public int getCount() {

count = pageSize;

int mod = totalCount % pageSize;

if (pageNo == this.getTotalPage() && mod > 0) {

count = mod;

}else if (pageNo> this.getTotalPage()) {

count = 0;

}

return count;

}

 

/**

* 获取总页数

* @return totalPage 总页数

*/

public int getTotalPage() {

if (totalCount < 0) {

totalPage = -1;

}

totalPage = totalCount / pageSize;

if (totalCount % pageSize > 0) {

totalPage++;

}

return totalPage;

}

 

/**

* 获取排序字段

* @return sort 排序字段

*/

public String getSort() {

return sort;

}

 

/**

* 设置排序字段

* @param sort 排序字段

*/

public void setSort(final String sort) {

this.sort = sort;

}

 

/**

* 获取排序类型(升序asc降序desc)

* @return sortType 排序类型(升序asc降序desc)

*/

public String getSortType() {

return sortType;

}

 

/**

* 设置排序类型(升序asc降序desc)

* @param sortType 排序类型(升序asc降序desc)

*/

public void setSortType(final String sortType) {

// 检查sortType字符串的合法值

String[] sortTypes = StringUtils.split(StringUtils.lowerCase(sortType),',');

for (String sortTypeStr : sortTypes) {

if (!StringUtils.equals(DESC, sortTypeStr) && !StringUtils.equals(ASC, sortTypeStr))

throw new IllegalArgumentException(String.format("Invalid SortType %S", sortTypeStr));

}

this.sortType = StringUtils.lowerCase(sortType);

}

 

/**

* 是否有下一页

* @return boolean 返回true表示有下页,反之没有

*/

public boolean isHasNext() {

return (pageNo + 1 <= getTotalPage());

}

 

/**

* 获取下一页码数

* @return int 页码数

*/

public int getNextPage() {

if (isHasNext())

return pageNo + 1;

else

return pageNo;

}

 

/**

* 是否有上一页

* @return boolean 返回true表示有上一页,反之没有

*/

public boolean isHasPre() {

return (pageNo - 1 >= 1);

}

 

/**

* 获取上一页码数

* @return int 上一页码数

*/

public int getPrePage() {

if (isHasPre())

return pageNo - 1;

else

return pageNo;

}

 

/**

* 获取请求次数

* @return draw 请求次数

*/

public Integer getDraw() {

return draw;

}

 

/**

* 设置请求次数

* @param draw 请求次数

*/

public void setDraw(Integer draw) {

this.draw = draw;

}

 

/**

* 获取当前起始位置

* @return start 当前起始位置

*/

public Integer getStart() {

return start;

}

 

/**

* 设置当前起始位置

* @param start 当前起始位置

*/

public void setStart(Integer start) {

this.start = start;

}

 

/**

* 获取页面显示记录数量

* @return length 页面显示记录数量

*/

public Integer getLength() {

return length;

}

 

/**

* 设置页面显示记录数量

* @param length 页面显示记录数量

*/

public void setLength(Integer length) {

this.length = length;

}

 

/**

* 获取搜索相关参数

* @return search

*/

public Map<String, String> getSearch() {

return search;

}

 

/**

* 设置搜索相关参数

* @param search

*/

public void setSearch(Map<String, String> search) {

this.search = search;

}

 

/**

* 获取排序相关参数

* @return order

*/

public List<Map<String, String>> getOrder() {

return order;

}

 

/**

* 设置排序相关参数

* @param order

*/

public void setOrder(List<Map<String, String>> order) {

this.order = order;

}

}

### MyBatis 分页插件实体类示例 #### 插件简介 MyBatis 提供了一个分页插件,可以方便地处理数据库查询结果的分页需求。该插件能够拦截 SQL 执行请求,在不改变原有 SQL 语句的情况下动态加入分页逻辑[^1]。 #### 配置分页插件 为了使分页功能生效,需先注册分页插件到 `SqlSessionFactory` 中: ```java // 创并配置分页插件 Interceptor paginationPlugin = new PageHelper(); Properties props = new Properties(); props.setProperty("helperDialect", "mysql"); paginationPlugin.setProperties(props); // 将插件添加至 SqlSessionFactory 的配置中 sqlSessionFactory.getConfiguration().addInterceptor(paginationPlugin); ``` 上述代码展示了如何创一个名为 `PageHelper` 的分页插件实例,并将其设置为 MySQL 数据库方言,最后将此插件添加到了 `SqlSessionFactory` 的配置列表内[^3]。 #### 实体类定义 对于分页操作而言,通常会有一个专门用于封装分页参数以及返回结果的对象。下面给出这样一个简单的 Java 类作为例子: ```java public class PageInfo<T> { private int pageNum; private int pageSize; private long total; private List<T> list; public PageInfo() {} // Getters and Setters... } ``` 此类包含了当前页面编号 (`pageNum`) 和每页显示记录数 (`pageSize`) ,还有总条目数量 (`total`) 及本页的数据集合 (`list`) 。这些成员变量共同构成了完整的分页信息结构。 #### Mapper 接口编 接下来是在 mapper 文件里声明具体的 DAO 方法签名。这里假设我们正在开发一个图书管理系统,则可能有如下接口定义: ```java @Mapper public interface BookDao { @Select("SELECT * FROM books ORDER BY id DESC LIMIT #{start},#{size}") List<Book> selectBooks(@Param("start") Integer start, @Param("size") Integer size); Long countAllBooks(); } ``` 注意这里的 SQL 查询并没有显式指定偏移量和限制条件;这是因为当启用了分页插件之后,它会在运行时自动修改原始 SQL 来完成真正的分页工作[^2]。 #### Service 层调用 最后一步就是在业务服务层组合以上组件来执行带分页效果的操作: ```java @Service public class BookService { @Autowired private BookDao bookDao; public PageInfo<Book> getBooksWithPaging(int pageNumber, int pageSize){ // 计算起始位置 int startPos = (pageNumber - 1) * pageSize; // 调用 dao 获取数据 List<Book> data = bookDao.selectBooks(startPos, pageSize); // 统计总数 long totalCount = bookDao.countAllBooks(); // 构 pageInfo 对象 PageInfo<Book> pageResult = new PageInfo<>(); pageResult.setList(data); pageResult.setTotal(totalCount); pageResult.setPageSize(pageSize); pageResult.setPageNum(pageNumber); return pageResult; } } ``` 这段代码实现了获取带有分页特性的书籍列表的功能。通过传入期望查看的具体页码及每一页应展示多少项这两个参数,即可得到相应范围内的书籍详情及其在整个表单里的相对定位情况[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值