深圳网站制作公司,做网站的分页查询,做淘宝客需要自己建网站吗,珠海网站建设培训班文章目录 前言原因1、Mybatis Plus版本的问题2、Mapper.xml文件中SQL语句格式问题3、Mybatis Plus默认分页拦截器问题4、分页参数传参问题5、分页配置的问题 解决方案1、升级对应的Mybatis-plus版本分页插件配置问题3、自定义分页拦截器4、正确的参数5、不同版本的配置文件3.4.… 文章目录 前言原因1、Mybatis Plus版本的问题2、Mapper.xml文件中SQL语句格式问题3、Mybatis Plus默认分页拦截器问题4、分页参数传参问题5、分页配置的问题 解决方案1、升级对应的Mybatis-plus版本分页插件配置问题3、自定义分页拦截器4、正确的参数5、不同版本的配置文件3.4.0之前版本3.4.0之后版本 完结 前言
前端小伙伴今天问我们后端同学说他写得列表有问题分页数据没有成功将所有数据都返回给前端了
后端同学有些懵逼的说我已经使用了service的pages接口来查询的列表为什么失败了呢
各位小伙伴你们知道怎么解决这个问题吗先考虑一下。
原因
1、Mybatis Plus版本的问题
当我们使用的是较旧的版本可能存在分页失效的问题。 解决办法升级到最新版本。
2、Mapper.xml文件中SQL语句格式问题
在Mapper.xml中书写SQL语句时当格式错误了就会导致分页失效。 正确的格式在最后加上limit #{offset}, #{pageSize} #{offset}偏移量 #{pageSize}每页显示的数量。
3、Mybatis Plus默认分页拦截器问题
默认情况下Mybatis Plus自带了一个分页插件com.baomidou.mybatisplus.plugins.PaginationInterceptor。但是有时候在进行复杂查询时这个分页插件可能会失效导致分页查询不到数据。
4、分页参数传参问题
如果使用的是分页查询方法那么在调用方法时就要传入Page对象而且必须在此前调用setRecordsTotal方法设置总记录数。如果不设置总记录数则分页插件无法工作。
5、分页配置的问题
不同版本的mybatis-plus需要的分页配置是不同的是分水岭版本为3.4.0
在它之后的版本开始将原有的PaginationInterceptor 标记为过时需要换成MybatisPlusInterceptor
解决方案
上面我们列出了5个导致分页结果失败的原因接下来我们看看如何解决呢分别一一对应来看。
1、升级对应的Mybatis-plus版本
如果我们使用的旧版本的Mybatis-plus则可以升级为新版的。 在pom文件里面更新 dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3/version
/dependency分页插件配置问题
这个可以按照上面所说的在Mapper.xml文件中调整
select idselectForPage resultMapBaseResultMapselect * from tb_userwhere1 1/wherelimit #{offset}, #{pageSize}
/select配置Mybatis-plus分页插件可以在application.yml文件中加入如下配置
mybatis-plus:configuration:# 分页插件一般不用修改page-params: pageNum1;pageSize10;countcountSql3、自定义分页拦截器
Mybatis-plus提供了自定义分页拦截器的功能可以根据我们自己的业务进行自定义。自定义分页拦截器需要继承com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor类然后在实现intercept方法在该方法中来处理我们具体的分页逻辑。 例如可以根据前端传入的分页参数进行分页而不是使用默认的分页参数。具体代码示例如下
public class CustomPaginationInterceptor extends PaginationInterceptor {Overridepublic Page SqlParserInterceptor(MappedStatement ms, Page page) {// 获取前端传入的分页参数Integer pageNum (Integer) page.get(pageNo);Integer pageSize (Integer) page.get(pageSize);// 处理分页逻辑int offset (pageNum - 1) * pageSize;return super.SqlParserInterceptor(ms, new Page(offset, pageSize));}
}4、正确的参数
假如在调用分页查询方法的时候没有传入Page对象或者是没有调用setRecordsTotal方法设置总条数则分页查询不到数据。可以采用以下方式正确传参具体代码如下
// 分页查询方法
IPageTest pageTest new Page(pageNo, pageSize);
// 设置总记录数
pageTest .setRecordsTotal(testMapper.selectCount(null));
// 查询
IPageTest pageResult testMapper.selectPage(pageTest , null);5、不同版本的配置文件
接下来我们看看不同版本的配置文件具体如何实现
3.4.0之前版本
在启动类中添加Bean配置类代码如下
/** Mybatis plus 分页插件 **/Beanpublic PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor new PaginationInterceptor();// 设置请求的页面大于最大页后操作 true调回到首页false 继续请求 默认false// paginationInterceptor.setOverflow(false);// 设置最大单页限制数量默认 500 条-1 不受限制paginationInterceptor.setLimit(-1);return paginationInterceptor;}3.4.0之后版本
配置类代码如下
package com.cafeteria.reservation.admin.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class MyBatisConfig {Beanpublic MybatisPlusInterceptor paginationInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor new MybatisPlusInterceptor();
//这是分页拦截器PaginationInnerInterceptor paginationInnerInterceptor new PaginationInnerInterceptor();paginationInnerInterceptor.setOverflow(false);paginationInnerInterceptor.setMaxLimit(500L);mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
//设置请求的页面大于最大页后操作true调回到首页false继续请求默认false
// paginationInterceptor.setOverflow(false);//设置最大单页限制数量默认500条-1不受限制
//paginationInterceptor.setLimit(500);
//开启 count 的 join 优化,只针对部分 left joinreturn mybatisPlusInterceptor;}
}
完结
今天的内容就到这里感觉对你有帮助可以点击下方卡片关注《coder练习生》