谷粒商城-分页查询工具类
这里用到了防止SQL注入工具类(待补充)
package com.jyyy.gulimall.common.utils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jyyy.gulimall.common.xss.SQLFilter;
import org.apache.commons.lang.StringUtils;
import java.util.Map;
/**
* 查询参数
*/
public class Query<T> {
// 返回调用改类的泛型类型的Ipage
public IPage<T> getPage(Map<String, Object> params) {
return this.getPage(params, null, false);
}
public IPage<T> getPage(Map<String, Object> params, // 参数有curPage limit order sidx asc
String defaultOrderField,// 默认排序字段
boolean isAsc) { // 默认降序
//分页参数(默认)
long curPage = 1;
long limit = 10;
// 页码(如果params有page,则获取)
if(params.get(Constant.PAGE) != null){
curPage = Long.parseLong((String)params.get(Constant.PAGE));
}
// 偏移(如果params有limit,则获取)
if(params.get(Constant.LIMIT) != null){
limit = Long.parseLong((String)params.get(Constant.LIMIT));
}
// 分页对象 mybatis-plus内容,实现Ipage
Page<T> page = new Page<>(curPage, limit);
// 分页参数 // 这样就又给传入的map传回去分页数据了
params.put(Constant.PAGE, page);
// 排序字段
// 防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
// 排序方式
String order = (String)params.get(Constant.ORDER);
// 前端字段排序
// 判断是否要排序,升序还是降序
if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
if(Constant.ASC.equalsIgnoreCase(order)) {
return page.addOrder(OrderItem.asc(orderField));
}else {
return page.addOrder(OrderItem.desc(orderField));
}
}
// 如果已经传来了排序字段,已经返回了
// 没有排序字段,则不排序
if(StringUtils.isBlank(defaultOrderField)){
return page;
}
// 默认排序
if(isAsc) {
page.addOrder(OrderItem.asc(defaultOrderField));
}else {
page.addOrder(OrderItem.desc(defaultOrderField));
}
return page;
}
}