一个简化mybatis-plus分页操作的utils

为了简化mybatis-plus对IPage和Page的使用,这里简单封装了一个class

package com.github.xyhshen.boot.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ObjectUtils;

import java.util.*;

/**
 * PageUtils
 * mybatis plus分页支持
 *
 * @author xie_yh
 * @date 2019/7/2 14:44
 */
public final class PageUtils {

    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    public static void setTotalCount(Long count) {
        threadLocal.set(count);
    }

    public static long getTotalCount() {
        return ObjectUtils.defaultIfNull(threadLocal.get(),-1L);
    }

    public static Page pageParam(Object ...params){
        int length = ArrayUtils.getLength(params);
        if(length < 2){
            return page();
        }
        Map<String,Object> paramMap = new HashMap<>();
        for(int i = 0;i < params.length / 2;i++){
            paramMap.put(Objects.toString(params[i * 2]),params[i * 2 + 1]);
        }
        return page(paramMap);
    }

    public static Page pageMap(Map<?,?> map){
        Map<String,Object> newMap = new HashMap<>();
        for(Map.Entry<?,?> entry:map.entrySet()){
            newMap.put(Objects.toString(entry.getKey()),entry.getValue());
        }
        return page(newMap);
    }
    public static Page page(Map<String,Object> map){
        Long start = MapUtils.getLong(map,"start");
        Integer limit = MapUtils.getInteger(map,"limit");
        if(start == null || start < 0){
            start = 0L;
        }
        if(limit == null || limit <= 0){
            limit = Integer.MAX_VALUE;
        }
        return new InternalPage((start / limit) + 1,limit,ObjectUtils.defaultIfNull(map,Collections.emptyMap()));
    }

    public static Page page(){
        return page(Collections.emptyMap());
    }

    public static <T> List<T> parse(IPage<T> result){
        if(result == null){
            setTotalCount(0L);
            return Collections.emptyList();
        }
        setTotalCount(result.getTotal());
        return result.getRecords();
    }
}

class InternalPage extends Page implements Map<String,Object>{

    private Map<String,Object> condition;

    public InternalPage(long current, long size, Map<String,Object> condition){
        super(current,size,true);
        this.condition = condition;
    }

    /**
     * @return Object>
     * @see InternalPage#condition
     **/
    @Override
    public Map<String, Object> condition() {
        return condition;
    }

    @Override
    public int size() {
        return condition.size();
    }

    @Override
    public boolean isEmpty() {
        return condition.isEmpty();
    }

    @Override
    public boolean containsKey(Object key) {
        return condition.containsKey(key);
    }

    @Override
    public boolean containsValue(Object value) {
        return condition.containsValue(value);
    }

    @Override
    public Object get(Object key) {
        return condition.get(key);
    }

    @Override
    public Object put(String key, Object value) {
        return null;
    }

    @Override
    public Object remove(Object key) {
        return null;
    }

    @Override
    public void putAll(Map<? extends String, ?> m) {

    }

    @Override
    public void clear() {

    }

    @Override
    public Set<String> keySet() {
        return condition.keySet();
    }

    @Override
    public Collection<Object> values() {
        return condition.values();
    }

    @Override
    public Set<Entry<String, Object>> entrySet() {
        return condition.entrySet();
    }
}

使用方法也很简单
如果需要创建Page对象,直接直接这么写就行

Page page = PageUtils.pageParam("start",10,"limit",50);

这个pageParam可以扩展增加其他参数,也可以缓存pageMap,支持map操作

Page page = PageUtils.pageParam("start",10,"limit",50,"userId",userId);
Map<String,Object> map = new HashMap<>();
map.put("start",10);
map.put("limit",50);
map.put("userId",userId);
Page page = PageUtils.pageMap(map);

然后解析返回的IPage<>内容

IPage<User> pages = userMapper.listUser(page);
List<User> users = PageUtils.parse(pages);

可以直接返回为list
最后这个util开启了count操作
若想返回总数可以直接,当然了仅在当前线程

long count = PageUtils.getTotalCount();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值