mybatis-分页

179 阅读2分钟

背景

分页插件工具。

核心

其实主要是2个点 1.如何使用 2.优点

如何使用

1.设置分页的数据 2.第一条查询sql,就会分页

优点

1.获取总数量更方便了。不需要再写重复的sql。 2.sql里也不用出现和分页相关的数据。

底层原理

还是基于拦截器

代码

@ApiOperation("业务员新增商机列表(bd)")

	@RequestMapping(value = "/addBusinessOpportunity/page", method = RequestMethod.GET)

	public RespBean addBusinessOpportunityPage(PageParam pageParam,String selectTime) {

		Integer employeeId = getSessionUser().getEmployeeId();

		// 获取分页

		Page<BusinessDataBusinessOpportunityVo> list = customerBusinessDataSevice.addBusinessOpportunityPage(selectTime,employeeId,pageParam);

		Map<String, Object> map = new HashMap<String, Object>();

		map.put("data", list);

		map.put("count", list.getTotal()); //获取总数量

		return RespBean.ok(map);

	}


public Page<BusinessDataBusinessOpportunityVo> addBusinessOpportunityPage(String selectTime,Integer employeeId,PageParam pageParam) {

        BpmPageHelper.startPage(pageParam); //设置输入数据

        List<Integer> employeeIds = new ArrayList<>();

        employeeIds.add(employeeId);

        String startTime =null;

        String endTime =null;

        if(selectTime!=null) {

            startTime = SelectTimeEnum.getStartTime(selectTime);

            endTime = SelectTimeEnum.getEndTime(selectTime);

        }

        return businessDataSeviceMapper.addBusinessOpportunityPage(employeeIds,startTime,endTime); //第一条查询sql

    }


如果有查询条件呢?

即关键字。解决方法?没有解决方法,因为没有方法。所以还是得必须手动传入数据,sql也必须显式写数据。

排序

有方法。

核心类


自己使用的时候,可以稍微封装一下
1.封装工具类,就是刚才上面的核心类
2.另外一个,就是参数

封装工具类

package com.wz.bpm.common;
import com.github.pagehelper.PageHelper;

/**
 * 分页包装对象
 *
 */
public class BpmPageHelper extends PageHelper {
    public static final int DEFAULT_PAGE_NUM = 1;
    public static final int DEFAULT_PAGE_SIZE = 10;

    public static void startPage(PageParam pageParam) {
        int pageNum = pageParam.getPage() == 0 ? DEFAULT_PAGE_NUM : pageParam.getPage();
        int pageSize = pageParam.getPageSize() == 0 ? DEFAULT_PAGE_SIZE : pageParam.getPageSize();
        // 开始分页
        startPage(pageNum, pageSize);
    }
}

封装参数

package com.wz.bpm.common;

import com.alibaba.fastjson.JSON;

import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;



@ApiModel
public class PageParam implements Serializable {
    private static final long serialVersionUID = 1L;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    /**
     * 当前页
     */
    @ApiModelProperty(value = "页号")
    private int page;
    /**
     * 新版datagrid用到的自定义排序字段
     */
    @ApiModelProperty(value = "排序字段名")
    private String sortName;

    /**
     * 新版datagrid用到的升序或降序字段
     */
    @ApiModelProperty(value = "排序类型")
    private String order;
    /**
     * 关键字
     */
    @ApiModelProperty(value = "关键字")
    private String keyword;
    /**
     * 每页的数量
     */
    @ApiModelProperty(value = "每页行数")
    private int pageSize;

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public String getKeyword() {
        return keyword;
    }

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }



    public String getSortName() {
        return sortName;
    }

    public void setSortName(String sortName) {
        this.sortName = sortName;
    }

    public String getOrder() {
        return order;
    }

    public void setOrder(String order) {
        this.order = order;
    }



    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }

}

参考

pagehelper.github.io/docs/howtou… //官方教程,非常好
github.com/pagehelper/…


juejin.cn/post/684490… //介绍了3种不同的解决思路
1.
2.sql //最常用的。缺点是优点笨拙。
3.拦截器 //就是分页插件的解决思路。优点是方便,缺点是解决不了关键字查询条件。