springboot集成Mybaitis分页插件 出现 【在系统中发现了多个分页插件,请检查系统配置!】

背景

项目中讨厌的前段让做分页,感觉自己好久没写过这么基础的crud了。但是出于负责人的角度考虑,我还是偷懒的使用分页插件了。

集成

分页插件对于springboot有两个可供选择

<!--版本一-->
 <dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper</artifactId>
     <version>5.1.11</version>
 </dependency>
 <!--版本二-->
 <dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper-spring-boot-starter</artifactId>
     <version>1.2.13</version>
 </dependency>

当然 pagehelper-spring-boot-starterpagehelper的springboot封装版,相对它更多的配置都已经弄好了
使用起来更方便,两个选一个就好

集成后报错

Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!
### Cause: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
	... 93 more
Caused by: java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!
	at com.github.pagehelper.PageHelper.skip(PageHelper.java:56)
	at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:93)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
	at com.sun.proxy.$Proxy258.query(Unknown Source)
	at com.github.pagehelper.util.ExecutorUtil.executeAutoCount(ExecutorUtil.java:138)
	at com.github.pagehelper.PageInterceptor.count(PageInterceptor.java:150)
	at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:97)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
	at com.sun.proxy.$Proxy258.query(Unknown Source)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
	... 99 more

一下子我就不开心了

解决方案和分析


    /**
     * 配置session工厂
     *
     * @return
     * @throws Exception
     */
    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
    
    
        final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

        sqlSessionFactoryBean.setDataSource(dataSource());

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:mybatis/*/*Mapper.xml"));

//        PageInterceptor pageInterceptor = new PageInterceptor();
//        Properties properties = new Properties();
//        properties.setProperty("helperDialect", "oracle");
//        properties.setProperty("reasonable", "true");
//        properties.setProperty("supportMethodsArguments", "true");
//        properties.setProperty("params", "pageNum=pageNum;pageSize=pageSize");
//        pageInterceptor.setProperties(properties);
//        sqlSessionFactoryBean.setPlugins(new Interceptor[]{
    
    pageInterceptor});

        return sqlSessionFactoryBean.getObject();
    }

根据源码分析可得, pagehelper-spring-boot-starter已经帮我们自动封装了一个PageInterceptor所以自己创建的这个就和那个冲突了,这段就相当于画蛇添足,注释掉即可。

PS:

1.当然如果你用的是这个的话pagehelper,一定要自己配置拦截器,否则Pagehelper无法使用
2. PageHelper.startPage(pageNum, pageSize); 仅对接下来第一个数据库查询生效哦

END

猜你喜欢

转载自blog.csdn.net/qq_35868811/article/details/106328251