PageHelper和MybatisPlus的分页插件冲突

Posted huagucc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PageHelper和MybatisPlus的分页插件冲突相关的知识,希望对你有一定的参考价值。

 分页插件优先使用的PageHelper的拦截器,所以当两种分页插件同时使用时PageHelper没有影响,而MybatisPlus的分页失效。解决方法:1、只用MyBatis+PageHelper或只用MybatisPlus;2、同时使用的话MybatisPlus构造查询语句,然后分页的业务交给PageHelper。同时使用的话不能配置MybatisPlus的分页插件,否则项目无法运行。

 参考博客:(52条消息) pagerHelper与mybatisPlus分页冲突问题分析_mybatisplus和pagehelp冲突_泡^泡的博客-CSDN博客

SpringBoot集成MyBatis的分页插件PageHelper

  昨天总结了本人学习springboot整合mybatis第一阶段的一些学习心得和源码,主要就算是敲了一下SpringBoot的门儿,希望能给各位的入门带给一点儿捷径,今天给各位温习一下MyBatis的分页插件PageHelper和SpringBoot的集成,它的使用也非常简单,开发更为高效。因为PageHelper插件是属于MyBatis框架的。

 

0.目录结构:

 

 

1.pom.xml引入jar包:

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

 

 

----------------------第一种整合方式(修改配置文件)---------------------------------------

 

2.修改Mybatis主配置文件,加上插件:(注意property的name用helperDialect,与spring整合必须用helperDialect,用dialect会报错)

 SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- <settings> 开启二级缓存 <setting name="cacheEnabled" value="true" /> </settings> -->
    <!-- 只需要定义个别名,这个应该有 -->
    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
            <property name="helperDialect" value="mysql" />
        </plugin>
    </plugins>
</configuration>

 

3.MyBatisConfig .java   (mybatis配置类)

package cn.qlq.config;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

import com.github.pagehelper.PageInterceptor;

@Configuration
public class MyBatisConfig {

    @Bean
    @ConditionalOnMissingBean // 当容器里没有指定的Bean的情况下创建该对象
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        // 设置mybatis的主配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/SqlMapConfig.xml");
        sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
        // 设置别名包
        sqlSessionFactoryBean.setTypeAliasesPackage("cn.qlq.bean");
        
        return sqlSessionFactoryBean;
    }
    
    
    
    
}

 

 

4.测试:

    @RequestMapping("list")
    public List<User> list(){
         //只对紧邻的下一条select语句进行分页查询,对之后的select不起作用
        PageHelper.startPage(1,3);
        List<User> list = userService.findAllUser();
        return list;
    }

 

 

4.启动测试:

 

 

 ----------------------第二种整合方式(修改配置类)---------------------------------------

  •   SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- <settings> 开启二级缓存 <setting name="cacheEnabled" value="true" /> </settings> -->
    <!-- 只需要定义个别名,这个应该有 -->
</configuration>

 

  • MyBatisConfig .java   (mybatis配置类 参数也要用helperDialect,否则会报错)
package cn.qlq.config;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

import com.github.pagehelper.PageInterceptor;

@Configuration
public class MyBatisConfig {

    @Bean
    @ConditionalOnMissingBean // 当容器里没有指定的Bean的情况下创建该对象
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        // 设置mybatis的主配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/SqlMapConfig.xml");
        sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
        // 设置别名包
        sqlSessionFactoryBean.setTypeAliasesPackage("cn.qlq.bean");
        
        
        //分页插件
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.setProperty("helperDialect", "mysql");
        properties.setProperty("reasonable", "true");
        properties.setProperty("params", "pageNum=pageNum;pageSize=pageSize");
        pageInterceptor.setProperties(properties);
        
        //添加插件
       sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor});
        
        return sqlSessionFactoryBean;
    }
    
    
    
    
}

 

 

  • 启动测试

 

 

 pageHelper使用以及未集成springboot配置参考:  http://www.cnblogs.com/qlqwjy/p/8442148.html

 

以上是关于PageHelper和MybatisPlus的分页插件冲突的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot集成MyBatis的分页插件PageHelper

Mybatis 的分页插件PageHelper-4.1.1的使用

Mybatis的分页插件PageHelper分页失效的原因

使用ajax和pageHelper实现简单的分页

Mybatis 的分页插件 PageHelper

分页插件:PageHelper+BootStrap+Vue+axios实现分页功能