zoukankan      html  css  js  c++  java
  • 用list完成分页+排序+条件查询

    因为对Mybatis的拦截器了解不深,自己又想写一个类似pageHelper的分页插件,最后决定用很笨拙的方式实现分页+排序+条件查询的功能。

    代码如下:

    package com.l712.persistent.common;
    
    import com.github.pagehelper.PageHelper;
    import com.l712.pojo.common.PageBean;
    import com.l712.pojo.common.PageQuery;
    import com.l712.utils.common.CommonStringUtils;
    import com.l712.utils.common.SpringUtils;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.apache.ibatis.session.SqlSession;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    import org.springframework.util.comparator.ComparableComparator;
    
    import javax.validation.constraints.NotNull;
    import java.lang.reflect.Method;
    import java.util.*;
    import java.util.concurrent.CopyOnWriteArrayList;
    
    /**
     *
     * @author l12
     * @T 查询的Pojo
     */
    @Component
    @NoArgsConstructor
    @Data
    public class MyBatisSimplePage<T> {
        @Value("${method:list}")
        private String methodName;
        @NotNull
        private Method method;
    
        @SuppressWarnings("unchecked")
        public PageBean<T> pageList(Class mapper, Integer pageSize, Integer currentPage, PageQuery pageQuery) {
            PageBean<T> pageBean = new PageBean<T>();
            try {
                Object o = SpringUtils.getBean(mapper);
                method = mapper.getMethod(methodName);
                ArrayList<T> allResults = (ArrayList<T>)method.invoke(o);
                if(allResults != null && allResults.size()>0){
                    setPageBean(pageSize, currentPage, pageBean, allResults);
                    List<String> sorts = pageQuery.getSorts();
                    if(sorts!=null && sorts.size()>0){
                        for (final String sort:sorts) {
                            Collections.sort(pageBean.getResults(), new Comparator<T>() {
                                @Override
                                public int compare(T t1, T t2) {
                                    try {
                                        String o1 = t1.getClass().getDeclaredMethod("get"+ CommonStringUtils.toUpperFirstChar(sort)).invoke(t1)+"";
                                        String o2 = t2.getClass().getDeclaredMethod("get"+ CommonStringUtils.toUpperFirstChar(sort)).invoke(t2)+"";
                                        return o1.compareTo(o2);
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                    return 0;
                                }
                            });
                        }
                    }
                }
                return pageBean;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        private void setPageBean(Integer pageSize, Integer currentPage, PageBean<T> pageBean, List<T> allResults) {
            pageBean.setPageSize(pageSize);
            pageBean.setCurrentPage(currentPage);
            pageBean.setTotalNum(allResults.size());
            pageBean.setTotalPage((pageBean.getTotalNum() + pageSize - 1) / pageSize);
            if(pageSize > allResults.size()){
                pageSize = allResults.size();
            }if(currentPage*pageSize > pageBean.getTotalNum()){
                pageBean.setResults(allResults.subList((currentPage-1)*pageSize,pageBean.getTotalNum()));
            }else{
                pageBean.setResults(allResults.subList((currentPage-1)*pageSize,currentPage*pageSize));
            }
    
        }
    
    }
    

      条件查询还没写,先睡个午觉,写完补充。TODO

  • 相关阅读:
    线程池及其原理和使用
    多线程通信Queue
    Condition实现线程通信
    守护线程和锁
    习题 7:更多的打印
    习题 6:字符串和文本
    习题 5:更多的变量和打印
    习题 4:变量和命名
    习题 3:数字和数学计算
    习题 2:注解和#号
  • 原文地址:https://www.cnblogs.com/handsomejunhong/p/8717255.html
Copyright © 2011-2022 走看看