package com.utils; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.plugins.Page; /** * 查询参数类,用于封装分页和排序信息 */ public class Query extends LinkedHashMap { private static final long serialVersionUID = 1L; // mybatis-plus分页参数 private Page page; // 当前页码 private int currPage = 1; // 每页条数 private int limit = 10; /** * 构造函数,使用JQPageInfo对象初始化查询参数 * @param pageInfo 包含分页和排序信息的JQPageInfo对象 */ public Query(JQPageInfo pageInfo) { // 设置分页参数 if (pageInfo.getPage() != null) { currPage = pageInfo.getPage(); } if (pageInfo.getLimit() != null) { limit = pageInfo.getLimit(); } // 防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String sidx = SQLFilter.sqlInject(pageInfo.getSidx()); String order = SQLFilter.sqlInject(pageInfo.getOrder()); // mybatis-plus分页 this.page = new Page<>(currPage, limit); // 设置排序字段和顺序 if (StringUtils.isNotBlank(sidx) && StringUtils.isNotBlank(order)) { this.page.setOrderByField(sidx); this.page.setAsc("ASC".equalsIgnoreCase(order)); } } /** * 构造函数,使用Map对象初始化查询参数 * @param params 包含分页和排序信息的Map对象 */ public Query(Map params) { this.putAll(params); // 设置分页参数 if (params.get("page") != null) { currPage = Integer.parseInt((String) params.get("page")); } if (params.get("limit") != null) { limit = Integer.parseInt((String) params.get("limit")); } // 计算偏移量并放入Map中 this.put("offset", (currPage - 1) * limit); this.put("page", currPage); this.put("limit", limit); // 防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String sidx = SQLFilter.sqlInject((String) params.get("sidx")); String order = SQLFilter.sqlInject((String) params.get("order")); this.put("sidx", sidx); this.put("order", order); // mybatis-plus分页 this.page = new Page<>(currPage, limit); // 设置排序字段和顺序 if (StringUtils.isNotBlank(sidx) && StringUtils.isNotBlank(order)) { this.page.setOrderByField(sidx); this.page.setAsc("ASC".equalsIgnoreCase(order)); } } /** * 获取mybatis-plus分页对象 * @return mybatis-plus分页对象 */ public Page getPage() { return page; } /** * 获取当前页码 * @return 当前页码 */ public int getCurrPage() { return currPage; } /** * 获取每页条数 * @return 每页条数 */ public int getLimit() { return limit; } }