tk.mybatis与com.github.pagehelper搭配使用时分页不生效问题解决方式

背景

团队最近对项目进行升级,将原来的Mybaits搭配PageHelper更换为通用Mybatis,项目启动不报错,但是分页不生效,从日志中看不到count语句。
Spring boot版本:2.3.10.RELEASE
Spring cloud版本:Hoxton.SR12

pom文件

<tk.mybatis.mapper.boot.version>2.1.5</tk.mybatis.mapper.boot.version>
<pagehelper-spring-boot.version>1.3.0</pagehelper-spring-boot.version>
        
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>${pagehelper-spring-boot.version}</version>
</dependency>
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>${tk.mybatis.mapper.boot.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </exclusion>
    </exclusions>
</dependency>

分析与调试

经过网上搜索,以及对源码进行调试,发现PageHelper启动时会执行com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration,调试发现addPageInterceptor没有执行,最后看到类上面注解@AutoConfigureAfter({MybatisAutoConfiguration.class}),意思是会在MybatisAutoConfiguration之后执行。而MybatisAutoConfiguration是org.mybatis的,tk.mybatis排除掉了 mybatis官方的starter会导致这个情况。

@Configuration
@ConditionalOnBean({SqlSessionFactory.class})
@EnableConfigurationProperties({PageHelperProperties.class})
@AutoConfigureAfter({MybatisAutoConfiguration.class})
public class PageHelperAutoConfiguration {
    @Autowired
    private List<SqlSessionFactory> sqlSessionFactoryList;
    @Autowired
    private PageHelperProperties properties;
    
    ...
}

解决

尝试了各种方法,总结经验,可按以下方式解决:
1、检查版本对应关系,Spring Boot、tk.mybatis、pagehelper三者之间的版本对应关系。
2、增加手动配置。

import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisConfig {
    @Bean
    public PageInterceptor pageInterceptor() {
        return new PageInterceptor();
    }
}

最终我通过增加手动配置,解决了这个问题。

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息