java 分页 中文问题_java分页解决方法总结

分页需要用到的俩个参数;pageNum(页码)、pageSize(每页的条数)

有时候前端(移动端)传递的是start(从多少条记录开始)、count(获取的数量,也就是条数)

后端方法需要的是;pageNum和pageSize

一、将start、count转换为pageNum和pageSize

(一)、定义PageCounter类

@Getter

@Setter

@Builderpublic classPageCounter {//当前页码

privateInteger pageNum;//每页的条数

privateInteger pageSize;

}

(二)、将 start、count转换为pageNum、pageSie

public classCommonUtil {//将 start、count转换为pageNum、pageSie

public staticPageCounter converToPageParameter(Integer start, Integer count){int pageNum = start/count;

PageCounter pageCounter=PageCounter.builder()

.pageNum(pageNum)

.pageSize(count)

.build();returnpageCounter;

}

}

二、分页的实现方法

mybatis 里的pager 分页-

(一)、pom.xml安装pagehelper

com.github.pagehelper

pagehelper

4.1.0

(二)、例子

@Override

public ServerResponse getOrderList(Integer userId, int pageNum, int pageSize) {

// 传入pageNum, pageSize参数

PageHelper.startPage(pageNum, pageSize);

// 获取orderList

List orderList = orderMapper.selectByUserId(userId);

// 对orderList进行处理,获取对应的volist

List orderVoList = assembleOrderVoList(orderList, userId);

// 使用orderList生成pageInfo

PageInfo pageResult = new PageInfo(orderList);

// 使用orderVoList设置setList

// 注意orderList和orderVoList

pageResult.setList(orderVoList);

return ServerResponse.createBySuccess(pageResult);

}

jpa里使用PageRequest

简单版:

@Overridepublic PagegetLatestPagingSpu(Integer pageNum, Integer pageSize) {

Pageable page= PageRequest.of(pageNum, pageSize, Sort.by("createTime").descending());returnspuRepository.findAll(page);

}

PageRequest.of()将对应的参数传递进去

完整版:

(一)、pom.xml安装dozermapper  用来对java bean进行拷贝

用到的场景:从数据库查询回来的数据,前端不全用的上,需要进行二次封装(Vo),自己一个个属性赋值太浪费时间。这时可以使用dozermapper

要求俩个bean的属性名要一致

com.github.dozermapper

dozer-core

6.5.0

(二)、封装分页实体类

//封装分页实体类

@Getter

@Setter

@NoArgsConstructorpublic class Paging{//总条数

privateLong total;//当前返回的条数

privateInteger count;//当前页吗

privateInteger page;//总页数

privateInteger totalPage;//结果 不确定数组里元素的类型,所以使用泛型

private Listitems;public Paging(PagepageT) {this.initPageParameters(pageT);this.items =pageT.getContent();

}//静态方法,子类可以调用

void initPageParameters(PagepageT) {this.total =pageT.getTotalElements();this.count =pageT.getSize();this.page =pageT.getNumber();this.totalPage =pageT.getTotalPages();

}

}

(三)、对分页进行再次封装,添加DozerBeanMapper功能

//对分页进行再次封装,添加DozerBeanMapper功能//如果不需要进行vo赋值,直接用Paging就行//需要俩个泛型 T是源文件的类型 K是目标文件的类型

public class PagingDozerextends Paging{

@SuppressWarnings("unchecked")public PagingDozer(Page pageT, Classclassk) {this.initPageParameters(pageT);//使用DozerBeanMapper拷贝属性

Mapper mapper =DozerBeanMapperBuilder.buildDefault();

List tList =pageT.getContent();

List voList = new ArrayList<>();//将查询出的数据循环赋值到vo中

tList.forEach(t ->{//t是源文件,classk是目标文件的class

K vo =mapper.map(t, classk);

voList.add(vo);

});this.setItems(voList);

}

}

(四)、service

@Overridepublic PagegetLatestPagingSpu(Integer pageNum, Integer pageSize) {

Pageable page= PageRequest.of(pageNum, pageSize, Sort.by("createTime").descending());returnspuRepository.findAll(page);

}

使用PageRequest生成Pageable

(五)、controller

@RequestMapping(value = "/latest", method =RequestMethod.GET)public PagingDozer getLatestSpuList(@RequestParam(defaultValue = "0") Integer start,

@RequestParam(defaultValue= "10") Integer count

) {

PageCounter pageCounter=CommonUtil.converToPageParameter(start, count);//从数据库查询出的数据

Page page =spuService.getLatestPagingSpu(pageCounter.getPageNum(), pageCounter.getPageSize());return new PagingDozer<>(page, SpuSimplifyVO.class);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值