一款简单实用的分页功能

第二章 一款简单实用的分页功能


前言

话不多说,直接上代码


一、分页功能?

很实用,开发几乎不可避免用到

二、使用步骤

1. BaseDto

代码如下(示例):

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

public class BaseDto implements Serializable {
    private static final long serialVersionUID = 1L;
    private String logId;
    private String globalUserCode;
    private String servletPath;
    private String powerSystemCode;
    private String powerCondition;
    private List operationDtos;

    public BaseDto() {
    }

    public String getPowerCondition() {
        return this.powerCondition;
    }

    public String getServletPath() {
        return this.servletPath;
    }

    public void setServletPath(String servletPath) {
        this.servletPath = servletPath;
    }

    public String getPowerSystemCode() {
        return this.powerSystemCode;
    }

    public void setPowerSystemCode(String powerSystemCode) {
        this.powerSystemCode = powerSystemCode;
    }

    public void setPowerCondition(String powerCondition) {
        this.powerCondition = powerCondition;
    }

    public String getGlobalUserCode() {
        return this.globalUserCode;
    }

    public void setGlobalUserCode(String globalUserCode) {
        this.globalUserCode = globalUserCode;
    }

    public String getLogId() {
        return this.logId;
    }

    public void setLogId(String logId) {
        this.logId = logId;
    }

    public List getOperationDtos() {
        return this.operationDtos;
    }

    public void setOperationDtos(List operationDtos) {
        this.operationDtos = operationDtos;
    }

    public void setBaseDto(BaseDto baseDto) {
        this.setGlobalUserCode(baseDto.getGlobalUserCode());
        this.setServletPath(baseDto.getServletPath());
        this.setPowerSystemCode(baseDto.getPowerSystemCode());
        this.setLogId(baseDto.getLogId());
    }
}

2.ResponseDto

代码如下(示例):

import java.io.Serializable;
import java.lang.reflect.Method;

public class ResponseDto extends BaseDto implements Serializable {
    private static final long serialVersionUID = 1L;
    private String resultCode;
    private String resultMsg;
    private Object resultObj;

    public static ResponseDto instance(Object resultObj) {
        return new ResponseDto(resultObj);
    }

    public static ResponseDto instance(Object resultObj, boolean flag) {
        ResponseDto responseDto = new ResponseDto(resultObj);
        Method method1 = null;
        Method method2 = null;

        try {
            method1 = resultObj.getClass().getMethod("getResultCode");
            method2 = resultObj.getClass().getMethod("getResultMsg");
        } catch (Exception var7) {
        }

        try {
            if (null != method1) {
                responseDto.setResultCode((String)method1.invoke(resultObj));
            }

            if (null != method2) {
                responseDto.setResultMsg((String)method2.invoke(resultObj));
            }
        } catch (Exception var6) {
        }

        return responseDto;
    }

    private ResponseDto(Object resultObj) {
        this.resultCode = "0000";
        this.resultMsg = "成功";
        this.resultObj = resultObj;
    }

    public ResponseDto() {
    }

    public ResponseDto(String resultCode, String resultMsg, Object resultObj) {
        this.resultCode = resultCode;
        this.resultMsg = resultMsg;
        this.resultObj = resultObj;
    }

    public String getResultCode() {
        return this.resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMsg() {
        return this.resultMsg;
    }

    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

    public Object getResultObj() {
        return this.resultObj;
    }

    public void setResultObj(Object resultObj) {
        this.resultObj = resultObj;
    }
}

3.PageInfo

代码如下(示例):

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

public class PageInfo<T> extends ResponseDto implements Serializable {
    private static final long serialVersionUID = 1L;
    public static final int DEFAULT_PAGE_SIZE = 10;
    private int pageNum = 1;
    private int pageSize;
    private int startRow;
    private List<T> list = new ArrayList();
    private long totalCount;
    private int pages;

    public PageInfo() {
    }

    public int getPageNum() {
        return this.pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return this.pageSize;
    }

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

    public int getStartRow() {
        return this.startRow;
    }

    public void setStartRow(int startRow) {
        this.startRow = startRow;
    }

    public List<T> getList() {
        return this.list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public long getTotalCount() {
        return this.totalCount;
    }

    public void setTotalCount(long totalCount) {
        this.totalCount = totalCount;
    }

    public int getPages() {
        return this.pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }
}

4.查询对象UserDto

代码如下(示例):

import lombok.Data;

/**
 * @author jingyikang
 * @date 2020/11/30 18:10
 * @description //TODO ProposalAgentBO类
 */
@Data
public class UserDto{
    private String code;
    private String name;
    private String age;
    private String sex;
}

5.Controller

代码如下(示例):

@RestController
@RequestMapping("/user")
public class userController {
//根据条件查询用户信息
    @RequestMapping(value = "/queryUserList", method = RequestMethod.POST)
    @ResponseBody
    public ResponseDto queryUserList(@RequestBody UserDto  userDto  , HttpServletRequest request){
        PageInfo<UserDto  > pageInfo = checklistService.selectUserService(orderMainDO);
        return ResponseDto.instance(pageInfo);
    }
}

6.省略接口直接ServiceImpl

代码如下(示例):

@Slf4j
@Service("mainService")
@Path(value = "user")
public class MainServiceImpl implements MainService {
 @Resource
    private MainMapper mapper;
     @Override
    public PageInfo<UserDto  > selectUserService(UserDto  dto) {
        // 创建分页查询对象(匿名内部类),实现查询/对象转换方法
        AbstractPageQuery<UserDto  ,UserDto  > query =new AbstractPageQuery<UserDto  , UserDto  >() {
            @Override
            protected List<UserDto  > doQueryPage(UserDto  userDto  ) {

                return mapper.selectUser(userDto  );
            }
            @Override
            protected UserDto  beanConvert(Object src) { return (UserDto  ) src;}
        };
        PageInfo<UserDto  > pageInfoRes;
        try {
            // 查询结果
            pageInfoRes = query.queryPage(dto);
            pageInfoRes.setResultCode("00000");
            pageInfoRes.setResultMsg("查询成功");
        } catch (Exception e) {
            throw new ShieException("查询用户发生异常!", e);
        }
        return pageInfoRes;
    }
}

6.1 附上AbstractPageQuery类

代码如下(示例):

import java.io.Serializable;

public class BaseQueryConditionDto extends BaseDto implements Serializable {
    private static final long serialVersionUID = 1L;
    private int pageNo;
    private int pageSize;
    private String orderByClause;

    public BaseQueryConditionDto() {
    }

    public int getPageNo() {
        return this.pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public int getPageSize() {
        return this.pageSize;
    }

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

    public String getOrderByClause() {
        return this.orderByClause;
    }

    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }
}
import com.github.pagehelper.PageHelper;
import com.shie.framework.dto.BaseQueryConditionDto;
import com.shie.framework.dto.PageInfo;
import java.util.List;

public abstract class AbstractPageQuery<T extends BaseQueryConditionDto, P> {
    public AbstractPageQuery() {
    }

    public PageInfo<P> queryPage(T condition) {
        Integer pageNo = condition.getPageNo();
        Integer pageSize = condition.getPageSize();
        pageNo = pageNo != null && pageNo != 0 ? pageNo : 1;
        pageSize = pageSize != null && pageSize != 0 ? pageSize : 10;
        PageHelper.startPage(pageNo, pageSize);
        com.github.pagehelper.PageInfo helperPage = new com.github.pagehelper.PageInfo(this.doQueryPage(condition));
        PageInfo<P> page = new PageInfo();
        page.setTotalCount(helperPage.getTotal());
        page.setPageNum(helperPage.getPageNum());

        for(int i = 0; i < helperPage.getList().size(); ++i) {
            page.getList().add(this.beanConvert(helperPage.getList().get(i)));
        }

        helperPage = null;
        return page;
    }

    protected abstract List doQueryPage(T var1);

    protected abstract P beanConvert(Object var1);
}

sql正常查询,会自动拦截添加limit。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值