Mybatis分页查询

参考网址:

https://blog.csdn.net/baidu_30670015/article/details/84636533

package org.ggj.nms.util;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.ggj.nms.base.vo.PageInfoView;

import java.math.BigDecimal;
import java.util.List;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;


public class PagerUtils {


    /**
     * 数据库查询分页
     *
     * @param pageNum  页数
     * @param pageSize 每页大小
     * @param function mybastis查询语句
     * @param <T>      实际mybastis的返回结果
     * @return 返回PageInfo
     */
    public static <T> PageInfoView<T> get(int pageNum, int pageSize, Supplier<List<T>> function) {
        PageInfo<T> page = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(function::get);

        return copyToPageView(page, page.getList());
    }

    /**
     * 数据库查询分页
     *
     *
     * @param function mybastis查询语句
     * @param <T>      实际mybastis的返回结果
     * @return 返回PageInfo
     */
    public static <T> PageInfoView<T> get(PageInfoView pageInfoView, Supplier<List<T>> function) {
        if(StringUtils.isNotBlank(pageInfoView.getSort())&&StringUtils.isNotBlank(pageInfoView.getOrder())){
            PageHelper.orderBy(pageInfoView.getSort()+" "+pageInfoView.getOrder());
        }

        PageInfo<T> page = PageHelper.startPage(pageInfoView.getPageNum(), pageInfoView.getPageSize()).doSelectPageInfo(function::get);

        return copyToPageView(page, page.getList());
    }

    /**
     * 查询db转换为另一个结果对象
     *
     * @param pageNum  页数
     * @param pageSize 页数大小
     * @param function sql执行
     * @param convert  转换方法
     * @param <T>      sql返回的对象
     * @param <R>      转换后的对象
     * @return
     */
    public static <T, R> PageInfoView<R> getAsResult(int pageNum, int pageSize,
                                                     Supplier<List<T>> function,
                                                     Function<T, R> convert) {

        PageInfo<T> page = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(function::get);
        return copyToPageView(page, page.getList().stream().map(convert).collect(Collectors.toList()));

    }


    private static <T> PageInfoView<T> copyToPageView(PageInfo page, List<T> list) {
        PageInfoView<T> pageView = new PageInfoView<>();
        pageView.setList(list);
        pageView.setPageNum(page.getPageNum());
        pageView.setPageSize(page.getPageSize());
        pageView.setPages(page.getPages());
        pageView.setSize((int)page.getTotal());

        return pageView;
    }

}

返回参数实体类

package org.ggj.nms.base.vo;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * - 避免多余引用。 包装一下字段
 * </p>
 * created on 2020-03-27
 *
 * @author : 代码生成工具
 */
@Data
public class PageInfoView<T> implements Serializable {

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;

    //总页数
    private int pages;
    // 排序字段
    private String sort;
    // 升序或者降序
    private String order;

    private List<T> list;



}

数据库语句:

<select id="selectAllNotice" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List"/>
    FROM sys_notice
    WHERE status = 0
    ORDER BY notice_id DESC
</select>

 

posted @ 2020-05-08 14:37  石头三  阅读(278)  评论(0编辑  收藏  举报