当前MySQL-plus版本:3.5.1 可能需要引用如图
使用Mybatis-plus关于page,Ipage时,发现无法生效分页的问题,虽然代码是并没有报错,但是打印SQL发现,仍旧执行完整的SQL。
分页SQL必然是包含查询条数total,也就是类似【select count(0)from * 】这样的SQL为优先再去查询对应页的SQL
ipage代码控制台打印正确类似于:
那么不生效是什么问题,又该如何使用?
在需要使用分页的地方使用:
1.手写new Page()方法
controller层:
Page<Object> page = new Page<>();
page.setCurrent(pageAll1.getPageNo());
page.setSize(pageAll1.getPageSize());
IPage<IHaveAchievement> info = iHaveAchievementService.pages(page, queryWrapper);
其中pageAll1.getPageNo()为Long型,可以直接写数字1 ,表示当前第一页,此处为动态插值!
其中pageAll1.getPageSize()为Long型,可以直接写数字20,表示显示条数20行,此处为动态插值!
pageAll实体类:
import lombok.Data;
@Data
public class PageAll {
public Long pageNo;
public Long pageSize;
service层:
IPage<IHaveAchievement> pages(Page page, QueryWrapper queryWrapper);
serviceImpl层:
@Service
public class IHaveAchievementServiceImpl extends ServiceImpl<IHaveAchievementMapper,IHaveAchievement> implements IHaveAchievementService {
@Autowired
private IHaveAchievementMapper iHaveAchievementMapper;
@Override
public IPage<IHaveAchievement> pages(Page page, QueryWrapper queryWrapper) {
Page page1 = iHaveAchievementMapper.selectPage(page, queryWrapper);
return page1;
}
}
Mapper层:
@Mapper
public interface IHaveAchievementMapper extends BaseMapper<IHaveAchievement> {
}
mapper.xml
仅实现即可!
此时结果并不理想,代码不报错,但分页实现不了!!!
通过一些博主的解决方法需要增加ipage 的配置方法类增加@Configuration 类 加@Bean 实现PaginationInterceptor
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MyBatisPlusPageConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
博主原文: mybatis-plus分页设置无效解决方法_mybatis plus 分页不起作用-CSDN博客
但是在3.5.1的Mybaits-plus不再提供PaginationInterceptor
在博主的评论区找到了最终解:
// 新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
3.5版本的MP可以这样写,检查包
com.baomidou.mybatisplus.extension.plugins
是否支持 MybatisPlusInterceptor
问题最终得以解决!
2.new Page也有其他的用法:
// 创建分页对象
Page page = new Page<>(pageNo,pageSize);
// 分页查询
IPage page1 = serviceBean.page(page, queryWrapper);
此处serviceBean是实现 iService.page方法
// 返回分页对象
resultObject = new PageResult<>(page1.getPages(), page1.getTotal(), page1.getRecords());
实现Ipage即可获得分页效果!