今天使用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。