2026/2/6 6:08:13
网站建设
项目流程
不是万维网的网站,做网站一定要有营业执照吗,中国外包公司排行榜,重庆市官方网站分页查询就是实现前端能进行翻页功能实现、查询功能实现等比如这张图片里面搜索功能和底下翻页的功能、每页展示多少条数据的功能
都是由我们后端返回的参数 total、pages、records等前端接收实现的
意思是这些功能我们后端不仅要实现分页功能#xff0c;前端接收我们返回的参…分页查询就是实现前端能进行翻页功能实现、查询功能实现等比如这张图片里面搜索功能和底下翻页的功能、每页展示多少条数据的功能都是由我们后端返回的参数 total、pages、records等前端接收实现的意思是这些功能我们后端不仅要实现分页功能前端接收我们返回的参数也要实现相对应的功能后端只用返回查询结果和返回的total等字段那么我们如何实现呢首先根据这张图我们需要几个类实体类 DTO以及VO这几个类来干嘛 DTO就是用来当形参的VO就是来当返回信息的实体类干嘛先别急听我说根据这张图片我们首先要实现对于人员姓名的模糊查询手机号的查询以及状态的查询所以我们是不是就要传三个字段username、phone、status呢是的然后我们定义一个dto类Data AllArgsConstructor NoArgsConstructor Api(tags 用户查询列表) public class QueryUserDto extends PageDto { ApiModelProperty(value 账号) private String account; ApiModelProperty(value 用户姓名) private String accName; ApiModelProperty(value 手机号) private String accPhone; ApiModelProperty(value 是否启用(1:启用,0:停用)) private Integer isEnable; }Api这些注解是用的swagger的相当于是提示功能这些都先不管我们是不是定义好了几个需要传入的字段ok 那么我们刚刚说了既然是分页功能是不是要由total、pageSize等字段呢import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; import lombok.Setter; Data Setter ApiModel(value 分页对象 ,description 分页查询实体) NoArgsConstructor public class PageDto { ApiModelProperty(value 页码,required true) private Integer PageNumber1; ApiModelProperty(value 每页显示数量,required true) private Integer PageSize10; ApiModelProperty(排序字段) private String sortBy; ApiModelProperty(排序方式) private Boolean isAsc; }这个就是我们需要传入的分页对象可以说是一个查询的模板大家可以保存下来要分页的时候拿出来用就行了。我们刚刚定义的QueryUserDto继承这个pageDto相当于pageDto是一个父类但我们用的是QueryUserDto在实际情况中我们可以通过需要传入哪些字段进行查询来定义我们QueryUserDto里面的字段然后是返回对象VO我们刚刚提到前端需要我们返回给他们Totalpages,records等字段VO里面就封装了这些字段import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; Data public class PageVOT { ApiModelProperty(value 每页显示的条数) private Long size 10L; ApiModelProperty(value 当前页) private Long current1L; ApiModelProperty(value 总条数) private Long total; ApiModelProperty(value 总页数) private Long pages; ApiModelProperty(value 分页数据) private ListT records; }这里面就封装了前端需要的字段每次返回给前端都会默认有这些字段这也是一个模板大家可以保存起来然后就是具体的实现方法首先就是mybatis-plus的分页插件import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; Configuration public class MyBatisConfig { Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }这个就是mybatis-plus提供的分页插件功能我们配置好后进入下一步创建相关的service接口类里面的方法暂且可以不管看PageUser这个方法然后实现类serviceImplOverride public R? PageUser(QueryUserDto queryUserDto) { PageAccountInfo userPage new Page(queryUserDto.getPageNumber(), queryUserDto.getPageSize()); LambdaQueryWrapperAccountInfo queryWrapper new LambdaQueryWrapper(); if(queryUserDto.getIsEnable()!null){ queryWrapper.eq(AccountInfo::getIsEnable,queryUserDto.getIsEnable()); } String accNamequeryUserDto.getAccName(); if (StringUtils.isNotBlank(accName)){ accNameaccName.trim(); queryWrapper.like(AccountInfo::getAccName,accName); } String accPhonequeryUserDto.getAccPhone(); if (StringUtils.isNotBlank(accPhone)){ accPhoneaccPhone.trim(); queryWrapper.like(AccountInfo::getAccPhone,accPhone); } String accountqueryUserDto.getAccount(); if (StringUtils.isNotBlank(account)){ accountaccount.trim(); queryWrapper.like(AccountInfo::getAccount,account); } PageAccountInfo page page(userPage,queryWrapper); PageVOAccountInfo userPageVO new PageVO(); BeanUtils.copyProperties(page,userPageVO); return R.Success(查询成功,userPageVO); }关于形参我在上面讲到过我们不用pageDto实现而是用他的子类QueryUserDto来实现因为是继承关系所以我们传入他的子类QueryUserDto。我们看起来这个代码很复杂其实我们可以分成三个板块看就很清晰结构了第一个这部分声明了一个Page类型的变量userPagePage是MyBatis-Plus中用于分页查询的类。AccountInfo是泛型参数表示这个分页查询将会返回AccountInfo类型的对象列表。AccountInfo是一个自定义的Java类通常代表了某种数据库表的结构。new Page(queryUserDto.getPageNumber(), queryUserDto.getPageSize());这部分通过new Page()构造函数创建了一个Page实例。queryUserDto是一个数据传输对象DTO通常用于封装从前端传递到后端的请求参数。在这个上下文中它封装了分页查询所需的页码和每页大小。queryUserDto.getPageNumber()获取请求中的页码通常是从1开始的整数。页码指定了用户想要查看哪一页的数据。queryUserDto.getPageSize()获取请求中的每页大小即每页应该显示多少条数据。第二个这部分代码是通过mybatis-plus中的Lambada来构造查询条件作用就是人员姓名模糊查询、状态查询、手机号查询trim()是来设置去除传入参数的空格的以便前端输入带有空格的数据时查询不出来第三个调用page方法传入分页信息userPage和查询条件queryWrapper然后返回一个包含查询结果和分页信息的PageAccountInfo对象。然后创建VO对象的实例通过BeanUtils工具类将查询出来的对象复制给VO对象这就是VO的作用用于返回信息运行效果总结首先我们需要引入分页插件配置然后创建DTO和VODTO包含我们需要的进行查询的字段继承PageDtoVO是返回信息的对象这样做不会影响我们创建的实体类。接下来就是service接口和serviceImpl实现类的创建在实现类里面编写我们分页的逻辑然后三部分结构引入Page实例、查询语句编写、page方法进行查询并复制给VO对象用于返回信息