IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【踩坑】mybatisplus3.x 和 pagehelper 结合分页失效的问题 -> 正文阅读

[Java知识库]【踩坑】mybatisplus3.x 和 pagehelper 结合分页失效的问题

背景

接手的这个项目, 由于开发的人好几个, 风格不一样, 里面既有mybatis, 也有mybatisplus, 分页大多用的是pagehelper

我一开始是将原本的mybatisplus2.x版本升级了下, 变成``3.x`, 然后写了个测试方法测试分页:

//这个是mybatisplus自带的分页功能
 IPage<Student> page = new Page<>(1,10);
        IPage<Student> page1 = studentService.page(page);
        System.out.println("page1 = " + page1.getRecords().size());
        assert page1.getRecords().size() == 10;

//同时要保证原本pagehelper的分页还能用
 PageHelper.startPage(1,10);
        List<CoursesVO> list = mystudyMapper.findCourses();
        PageInfo<CoursesVO> pageInfo = new PageInfo<>(list);
        System.out.println("pageInfo = " + pageInfo.getList().size());
        assert pageInfo.getList().size() == 10;

结果是, 没有报错, 但是发现list是查回来所有结果, 且total是0

解决

最终各种找资料, 排列组合+枚举, 加每次超长的编译等待时间, 搞了2个下午加1个晚上加1个上午的时间. 总算搞定了

1. 依赖

先说最终可行的方案:
首先依赖:

 <!-- mybatis plus与其 代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
              <version>3.5.2</version>
                <scope>compile</scope>
        </dependency>
        <!--mybatis-plus分页-->
        <!--pagehelper的1.3.1版本和mybatisplus的3.4.2版本不会有jar冲突, 主要是jsqlparser都会是4.0版本-->

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis-spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
		<!-- 下面2个依赖用于声明版本, 可放到parent 的pom的dependencyManagement-->
   		<dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <!--mybatis-plus 3.4.2对应的mybatis是3.5.6-->
                <version>3.5.6</version>
            </dependency>
             <dependency>
                <!--mybatisplus 3.4.2 版本 要和4.0的jsqlparser适配-->
                <groupId>com.github.jsqlparser</groupId>
                <artifactId>jsqlparser</artifactId>
                <version>4.0</version>
            </dependency>

首先是依赖冲突, 将pagehelper里面的mybatis几个依赖排除
其次是jsqlparser, pagehelper里的这个版本很低, 我试了下要匹配mybatisplus的3.4.2版本, 需要pagehelper的1.3.1版本

2. 配置

这个可以说是最蛋疼的了, 因为本身mbplus的高级版本就有不同的分页配置方式, 在我不停的切换mybatisplus版本的时候, 随之带来的是更多的排列组合的配置.

//高版本 3.4.2 我用的这个
    @Bean("mybatisPlusPageInterceptor")
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
//低版本 3.3.0用的下面这个
//    @Bean("mybatisPlusPageInterceptor")
//    public PaginationInterceptor paginationInterceptor() {
//        return new PaginationInterceptor();
//    }

pagehelper的配置不用改

#pagehelper分页插件
pagehelper:
  reasonable: true
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql

接着就是最容易被忽视的, 也是我最后加上才成功的

    @Bean(name = "dataSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        // 解决 Invalid bound statement 问题
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();

        bean.setDataSource(dataSource);

		//重点加上这个bean的配置
        Interceptor[] plugins = {mybatisPlusPageInterceptor};
        bean.setPlugins(plugins);

        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml"));
        return bean.getObject();
    }
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:33:07  更:2022-04-30 08:35:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:13:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码