Java实现手写分页

时间:2025-03-04 21:04:05

1.实现类

public ResponseResult<List<AppDO>> page(AppPageQueryDto appPageQueryDto) {
    //开始页
    Integer currentPage = appPageQueryDto.getPageNum();
    //每页条数
    Integer pageSize = appPageQueryDto.getPageSize();
    //查询总条数
    int count = appMapper.count(appPageQueryDto);
    //计算总页数
    int totalPage = (count + pageSize - 1) / pageSize;
    /**
     * Pagination
     * 当前页码 pageNum
     * 分页大小 pageSize
     * 总数目 totalSize
     * 总页数 totalPage
     **/
    Pagination pagination = PaginationUtils.buildPagination(count, totalPage, currentPage, pageSize);
    List<AppDO> appDOList = Lists.newArrayList();
    if (count > 0) {
        appPageQueryDto.setStartRow((currentPage - 1) * pageSize);
        //查询sql LIMIT #{startRow}, #{pageSize}
        appDOList = appMapper.queryPage(appPageQueryDto);
    }
    return ResponseResult.newSuccessResponse(appDOList, pagination);
}


 /**
  * @Author kuli
  * @Date 2022/3/4
  * @Descriptio 查询总个数
  * @Param
  * @Return
  **/
int count(AppPageQueryDto appPageQueryDto);

 /**
  * @Author kuli
  * @Date 2022/3/3
  * @Description 分页查询接口
  * @Param
  * @Return
  **/
 List<AppDO> queryPage(AppPageQueryDto appPageQueryDto);

<parameterMap id="appDOParam" type=""></parameterMap>
<parameterMap id="appPageParam" type=""></parameterMap>

<select id="queryPage" resultMap="BaseResultMap" parameterMap="appPageParam">
    SELECT
    <include refid="BaseColumns"/>
    FROM cmdb_application
    <include refid="whereCondition"/>
    ORDER BY date_created DESC
    LIMIT #{startRow}, #{pageSize}
</select>

<select id="count" resultType="" parameterMap="appPageParam">
    SELECT
    count(1)
    FROM cmdb_application
    <include refid="whereCondition"/>
</select>

<sql id="whereCondition">
    <trim prefix="WHERE" prefixOverrides="AND|OR">
        <if test="code!=null and code != ''">
            AND code = #{code}
        </if>
    </trim>
</sql>

List 分页

//根据填报状态筛选
List<CmaNationaldebtProjectDispatch> projectDispatchList = ().filter(e -> (reportingStatus) ? true : ().equals(reportingStatus)).collect(());
// 手动分页
//currentPage 当前页
Integer pageNum = ((()));
//获取每页条数
Integer pageSize = ((()));
//returnCount 总条数
Integer count = ();
//allPage 总页数
Integer totalPage = (count + pageSize - 1) / pageSize;
//list 当前页数据
List<CmaNationaldebtProjectDispatch> cmaNationaldebtProjectDispatches = new ArrayList<>();
if (count > 0) {
   if (count <= pageNum * pageSize) {
       cmaNationaldebtProjectDispatches = ((pageNum - 1) * pageSize, count);
   } else {
       cmaNationaldebtProjectDispatches = ((pageNum - 1) * pageSize, pageNum * pageSize);
   }
}
return new ListVO((), (), (), cmaNationaldebtProjectDispatches);