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();
}
}
最终我通过增加手动配置,解决了这个问题。