Mybatis-plus关于page,Ipage不生效解决问题

当前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即可获得分页效果!

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-plus是一个优秀的持久层框架,它在MyBatis的基础上进行了扩展和增强。MetaObjectHandler是MyBatis-plus提供的一个接口,用于自动填充实体类中的字段值。但有时候我们可能会遇到MetaObjectHandler不生效的问题。 出现MetaObjectHandler不生效的问题可能有以下几个原因: 1. 没有正确配置MetaObjectHandler:在使用MyBatis-plus时,需要在配置文件中配置MetaObjectHandler的实现类,并将其注入到SqlSessionFactory中。确保配置正确,使得MyBatis-plus能够正确地识别和使用MetaObjectHandler。 2. 实体类没有使用@TableField注解:在需要自动填充的字段上,需要使用@TableField注解进行标记。确保实体类中需要自动填充的字段都使用了@TableField注,并设置了相应的属性值。 3. 字段名与列名不一致:如果实体类中的字段名与数据库表中的列名不一致,需要使用@TableField注解value属性指定数据库列名。确保字段名与数据库列名一致,以便MyBatis-plus能够正确地进行自动填充。 4. 数据库表没有设置默认值或触发器:如果需要自动填充的字段在数据库表中没有设置默认值或触发器,那么在插入或更新数据时,MetaObjectHandler也无法生效。确保数据库表中需要自动填充的字段设置了默认值或触发器。 如果以上几点都没有问题,但仍然遇到MetaObjectHandler不生效的问题,可以尝试检查MyBatis-plus的版本是否与其他依赖库存在冲突,或者查看日志文件以获取更多的错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值