JAVA API数据接口分页排序工具 -java代码分页-jqgrid解析json数据并展示

注意:本工具是通过java代码进行数据分页,每次分页需要查询出满足条件的全部数据,再进行分页。数据量大的情况下不推荐使用。同时建议将数据进行缓存处理。

以下两个类均是之前在网上看见的,通过简单修改整理将两个类结合在一起使用。

排序工具ListSortUtil.java

package com.*.utils;
 
 
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
public class ListSortUtil<T> {
    //数组排序的方法
    //传入list  传入排序字段 传入是否升序
    public List<T> sort(List<T> list, final String  sortField, final Boolean Ascending){
 
        Collections.sort(list, new Comparator<T>() {//排序
            @Override
            public int compare(T o1, T o2) {
                int retVal=0;
                //首字母转大写
                String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w","");
                String methodStr="get"+newStr;
                try {
                    Method method1 = ((T) o1).getClass().getMethod(methodStr, null);
                    Method method2 = ((T) o2).getClass().getMethod(methodStr, null);
                    //获取返回值类型  Type t = method.getAnnotatedReturnType().getType();
                    //返回值为数字和字符串使用不同的比较方法  
                    if(isStr2Num(method2.invoke(((T) o1), null).toString())){//判断值能否转数字
                        retVal = Integer.parseInt(method2.invoke(((T) o2), null).toString())-Integer.parseInt(method1.invoke(((T) o1), null).toString()); // 倒序
                    }else{
                        retVal = method2.invoke(((T) o2), null).toString().compareTo(method1.invoke(((T) o1), null).toString()); // 倒序
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }
                if (Ascending) {
                    return 0-retVal;
                } else {
                    return retVal;
                }
            }
        });
        return list;
    }
 
 
    /**
     * 查看一个字符串是否可以转换为数字
     * @param str 字符串
     * @return true 可以; false 不可以
     *
     */
    public  boolean isStr2Num(String str) {
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
 
}

 


分页工具ListPageUtil.java

package com.*.pojo;
 
 
import com.*.utils.ListSortUtil;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
 
public class  ListPageUtil<T> {
    /**原集合*/
    private List<T> data;
    /** 上一页 */
    private int lastPage;
    /** 当前页 */
    private int nowPage;
    /** 下一页 */
    private int nextPage;
    /** 每页条数 */
    private int pageSize;
    /** 总页数 */
    private int totalPage;
    /** 总数据条数 */
    private int totalCount;
 
    public ListPageUtil(List<T> data,Integer nowPage,Integer pageSize,String sort,String sortkey) {
        Boolean sorts=true;
        String sortskey="id";
        if (data == null ) {
            data=new ArrayList<>();
        }
        if(nowPage==null){
            nowPage=1;
        }
 
        if(pageSize==null){
            pageSize=10;
        }
 
        if(sort!=null&&sort.equalsIgnoreCase("desc")){
            sorts=false;
        }
 
        if(sortkey!=null&&!sortkey.equals("")){
            sortskey=sortkey;
        }
 
        ListSortUtil<T> sortUtil=new ListSortUtil<>();
        try{
            data=sortUtil.sort(data,sortskey,sorts);
        }catch (Exception e){
 
        }
 
        this.data = data;
        this.pageSize = pageSize;
        this.nowPage = nowPage;
        this.totalCount = data.size();
        this.totalPage = (totalCount + pageSize - 1) / pageSize;
        this.lastPage = nowPage-1>1? nowPage-1:1;
        this.nextPage = nowPage>=totalPage? totalPage: nowPage + 1;
 
    }
 
   
 
    public int getPageSize() {
        return pageSize;
    }
 
    public List<T> getData() {
       // return data;
        int fromIndex = (nowPage - 1) * pageSize;
        if (fromIndex >= data.size()) {
            return Collections.emptyList();//空数组
        }
        if(fromIndex<0){
            return Collections.emptyList();//空数组
        }
        int toIndex = nowPage * pageSize;
        if (toIndex >= data.size()) {
            toIndex = data.size();
        }
        return data.subList(fromIndex, toIndex);
    }
    public int getLastPage() {
        return lastPage;
    }
 
    public int getNowPage() {
        return nowPage;
    }
 
    public int getNextPage() {
        return nextPage;
    }
 
    public int getTotalPage() {
        return totalPage;
    }
 
    public int getTotalCount() {
        return totalCount;
    }
 
 
 
    public ListPageUtil() {
    }
 
    public void setData(List<T> data) {
        this.data = data;
    }
 
    public void setLastPage(int lastPage) {
        this.lastPage = lastPage;
    }
 
    public void setNowPage(int nowPage) {
        this.nowPage = nowPage;
    }
 
    public void setNextPage(int nextPage) {
        this.nextPage = nextPage;
    }
 
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
 
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
 
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
}

 


使用演示:
 

List<User> list = userService.list();// 待排序的数据
//依次传入:待排序数据  页码  数据条数 排序方式 排序字段
//例如:list  1  30 desc id
//将list集合通过id字段排序,获取第一页的数据,每页数据为30条,
//字段根据实体类,只要User里面有id字段并且有get个set方法即可,get和set建议自动生成避免出错。 
ListPageUtil<User> listPageUtil = new ListPageUtil<User>(list, page, rows, sord, sidx);

 


返回数据:

{"data":[{"id":12,"type":"商品异常","context":"111","contacts":"68****85","code":1,"uid":2,"username":"123456"}],"lastPage":1,"nowPage":2,"nextPage":2,"pageSize":10,"totalPage":2,"totalCount":11}

 

data:返回的数据
lastPage:上一页页码
nextPage:下一页页码
nowPage:当前页码
pageSize:每页条数
totalCount:共有多少条数据
totalPage:共有多少页
通过分页工具分页后的数据,使用jqgrid表格展示数据非常方便,这里提供部分代码,记得引入相关js和css。
详细教程还请参考官方文档,大家也可以直接使用hadmin后台模板,找到jqgrid表格,直接修改js部分就可以使用。

原文链接:https://blog.csdn.net/qq_41780372/article/details/85244571

posted @ 2020-04-17 19:59  liuminchao  阅读(778)  评论(0编辑  收藏  举报