新版的MybatisPlus分页报错,sql会多拼接一个limit???

今天使用mybatis plus报错显示语法错误,后来查询sql语句发现是多了一个Limit????

多了一个Limit这是什么鬼,

后来查询有的说是多PageHelper的问题

原因:

PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。

线程中start的page 不能保证线程在当前执行退出时清理完page变量

复现:

在执行PageHelper.start(pageNum,pageSize);方法后,参数page变量,如xx!=null,直接返回XX,则page没有被消费,这个参数就会一直保留在这个线程上。当这个线程再次被使用时,如果接下来执行其它sql,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。

如果PageHelper.start(pageNum,pageSize);之后的方法加了缓存,也会有这个问题。

解决方法:

1.使用参数方式是极其安全的 2.保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,必须保证分页和查询同时有效。 3.调PageHelper.clearPage();


可我并没有使用PageHelper。。。。上面的方法并没有解决我的问题。。。。

后来询问大佬,发现是我在配置mybatis-plus的时候陪错了

@Configuration
public class MybatisPlusPageConfig {
    /**
     * 老版本
     *
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * 新版配置
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //能够添加很多拦截器实现
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
}

这里只需要一个bean就行,注入两个bean就会报我上面的问题。

好吧,如果大家也遇到这种问题,看看是否跟我一样,注入了两个Bean。

经验分享 程序员 微信小程序 职场和发展