今天爱分享给大家带来syntax error, error in :’it 5 LIMIT ? ‘, expect LIMIT, actual LIMIT pos【解决方法】,希望能够帮助到大家。
今天检查项目日志时发现了这样一个问题:
syntax error, error in :’it 5 LIMIT ? ‘, expect LIMIT, actual LIMIT pos
问题出现原因:
由于在项目中使用了PageHelper分页插件,
PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。
只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。
线程中start的page 不能保证线程在当前执行退出时清理完page变量。
所以在生产环境中,PageHelper的调用在多线程的情况下没有清除ThreadLocal存储的对象,所以正常的sql语句执行时,会被PageHelper强行增加一个limit实现分页
正确示例:
错误示例:
错误示例解决方法:
1.改成正确示例方式(建议)
2.清除page变量: