首页  > 世界杯男足 > 关于java分页功能以及传参规范

关于java分页功能以及传参规范

世界杯男足 2025-05-03 11:22:00 2024

java分页以及传参规范,特此工作记录

不用插件

//当前页码

private static final Integer currentPage = 2;

//设置每页个数

private static final Integer pageSize = 5;

@Test

public void test8() {

//手写一个分页测试,不用插件

List list = new ArrayList<>(Arrays.asList(1,2,3,4,5,

6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22));

for (int i = (currentPage-1)*pageSize; i < currentPage*pageSize; i++) {

if (i>=list.size()){

break;

}

Integer num = list.get(i);

System.out.print(num+" ");

}

}

6 7 8 9 10

PageHelper插件

PageHelper 是一款开源的 MyBatis 分页插件。不可和mybatis-plus搭配用。

引入jar包

com.github.pagehelper

pagehelper

5.1.10

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.10

javax.validation

validation-api

1.1.0.Final

配置文件

pagehelper:

auto-dialect: mysql

reasonable: true

params: count=countSql

support-methods-arguments: true

定义分页请求泛型类

import com.sun.istack.internal.NotNull;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

import javax.validation.Valid;

import java.io.Serializable;

@Data

@Api("分页请求对象")

public class PageRequest implements Serializable {

@ApiModelProperty(value = "当前页码",required = true,example = "1")

@NotNull

private Integer pageNum;

@ApiModelProperty(value = "每页页数",required = true,example = "1")

@NotNull

private Integer pageSize;

@Valid

private T data;

}

案例

@PostMapping("pageTest")

@ApiOperation("分页测试")

public PageSerializable queryUserInfo(

@RequestBody @Valid PageRequest userInfoPageRequest){

return duoService.listUserInfo(userInfoPageRequest);

}

@Override

public PageSerializable listUserInfo(PageRequest pageRequest) {

//首先将前端传入的参数赋给目标对象

UserInfoParam userInfoParam = new UserInfoParam();

BeanUtils.copyProperties(pageRequest.getData(), userInfoParam);

int userCount = duoMapper.selectNum(userInfoParam);

//开启分页

PageMethod.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());

//开始查询数据

List listInfo = duoMapper.selectByInfo(userInfoParam);

if (userCount == 0){

return new PageSerializable<>();

}

PageSerializable pageSerializable = new PageSerializable<>();

pageSerializable.setTotal(userCount);

pageSerializable.setList(listInfo);

return pageSerializable;

}

startPage放在查询语句上面,因为插件的原理是在sql上拼接 limit 传进去两个参数,传入了当前页码数和每页显示的条数

比如

select * from user_info where area=? LIMIT ?, ?

swagger结果

优化分页代码

@Override

public PageSerializable listUserInfo(PageRequest pageRequest) {

//首先将前端传入的参数赋给目标对象

UserInfoParam userInfoParam = new UserInfoParam();

BeanUtils.copyProperties(pageRequest.getData(), userInfoParam);

//开启分页

PageMethod.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());

return new PageSerializable<>(duoMapper.selectByInfo(userInfoParam));

}

这里用了Spring的拷贝函数,没有返回值,所以需要先实例化对象然后赋值。

import org.springframework.beans.BeanUtils;

BeanUtils.copyProperties(source,target);

把源对象source的属性值赋给目标对象target中与源对象source的中有着同属性名的属性,属性名和属性类型都相同的属性才能被成功拷贝赋值。

这样做的目的是为了保持传参的原始性,方便在复杂的业务逻辑中进行比对。

传递到后台的参数,应该要求有专门的类, 返回结果也应该有专门的类,比如

入参:userRequest

复制给 userParam 对象并传到mapper层

mapper层结果返回给 userDO 对象

最后返回给前端为 userDTO 对象

这是一种规范的传参过程

其他的拷贝的函数hutool

cn.hutool

hutool-all

5.4.2

@Override

public PageSerializable listUserInfo2(PageRequest pageRequest) {

//首先将前端传入的参数赋给目标对象

UserInfoParam userInfoParam = BeanUtil.copyProperties(pageRequest.getData(), UserInfoParam.class);

//开启分页

PageMethod.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());

return new PageSerializable<>(duoMapper.selectByInfo(userInfoParam));

}

建议使用hutool,因为有返回值,不需要实例化对象了。


友情链接:
Copyright © 2015 冲击世界杯_2002韩日世界杯 - 0534pos.com All Rights Reserved.