pagehelper-spring-boot
pagehelper-spring-boot copied to clipboard
调用PageHelper报空指针异常
当sql用list的方式全部取出时,是能查出数据的,加入PageHelper后报错,单步调试时,能看出执行过count的sql并成功取到正确的值,但接着往下调试时(貌似是进的第二次),com.github.pagehelper.dialect.AbstractHelperDialect.afterCount方法中的Page page = getLocalPage();为null,所以在下一步的page.setTotal(count);会报空指针异常。请问是哪里的配置不对吗?
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: java.lang.NullPointerException
The error may exist in com/yaos/ucenter/module/mapper/user/UserMapper.java (best guess)
The error may involve com.yaos.ucenter.module.mapper.user.UserMapper.findPage_COUNT
The error occurred while handling results
SQL: SELECT count(0) FROM t_user u, t_user_detail ud WHERE 1 = 1 LIMIT 10
Cause: java.lang.NullPointerException
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77) ~[mybatis-spring-1.3.1.jar:1.3.1]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-1.3.1.jar:1.3.1]
at com.sun.proxy.$Proxy82.selectList(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.1.jar:1.3.1]
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) ~[mybatis-3.4.2.jar:3.4.2]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.2.jar:3.4.2]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.2.jar:3.4.2]
at com.sun.proxy.$Proxy91.findPage(Unknown Source) ~[na:na]
at com.yaos.ucenter.module.serviceimpl.user.UserServiceImpl.lambda$findPage$0(UserServiceImpl.java:162) ~[classes/:na]
at com.github.pagehelper.Page.doSelectPageInfo(Page.java:311) ~[pagehelper-5.0.0.jar:na]
at com.yaos.ucenter.module.serviceimpl.user.UserServiceImpl.findPage(UserServiceImpl.java:162) ~[classes/:na]
at com.yaos.ucenter.module.controller.user.UserApiController.getUserPages(UserApiController.java:123) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_112]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_112]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_112]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.6.jar:8.5.6]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_112]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_112]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.6.jar:8.5.6]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_112]
Caused by: org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: java.lang.NullPointerException
The error may exist in com/yaos/ucenter/module/mapper/user/UserMapper.java (best guess)
The error may involve com.yaos.ucenter.module.mapper.user.UserMapper.findPage_COUNT
The error occurred while handling results
SQL: SELECT count(0) FROM t_user u, t_user_detail ud WHERE 1 = 1 LIMIT 10
Cause: java.lang.NullPointerException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~[mybatis-3.4.2.jar:3.4.2]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150) ~[mybatis-3.4.2.jar:3.4.2]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.2.jar:3.4.2]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_112]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_112]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_112]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.1.jar:1.3.1]
... 52 common frames omitted
Caused by: java.lang.NullPointerException: null at com.github.pagehelper.dialect.AbstractHelperDialect.afterCount(AbstractHelperDialect.java:71) ~[pagehelper-5.0.0.jar:na] at com.github.pagehelper.PageHelper.afterCount(PageHelper.java:73) ~[pagehelper-5.0.0.jar:na] at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:115) ~[pagehelper-5.0.0.jar:na] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.4.2.jar:3.4.2] at com.sun.proxy.$Proxy113.query(Unknown Source) ~[na:na] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.2.jar:3.4.2] ... 58 common frames omitted
这个错误是由于配置了两个以上分页插件导致的错误。。把你项目中所有和 PageInterceptor 有关的配置都发出来看看。。我现在特别好奇是怎么配置两个的。
我也报同样的错,并没有配置两个分页插件
pageHelper 5.0的bug吧,我换回4.2.1就不报错了
就是直接按照您的springboot那个demo项目中的三个starter集成的呀。。。没有单独设置PageInterceptor,就是按照https://github.com/abel533/MyBatis-Spring-Boot这个里面复制过去的。。。
我目前全部换成一个一个分开集成的方式。。。就好了。。。没有用starter。。。就瞬间好了。。。
pom参照如下:
分开集成和三个集成有什么区别吗?能把有问题的配置贴上了看看吗。
额,不明白是哪里的错,出问题的配置是我提交issue的日期时的https://github.com/abel533/MyBatis-Spring-Boot 这个demo里面的配置配的。。。。
可能问题是#1里面的大神提出的那样,我大概调试到他出错的那步我就没有深究了,惭愧。。。
Yggdrasil 1 1484718265495 INFO DESKTOP-AD5AH36 idcenter 1 No active profile set, falling back to default profiles: default Yggdrasil 1 1484718277851 INFO DESKTOP-AD5AH36 idcenter 1 Started UserApplication in 17.288 seconds (JVM running for 19.026) Yggdrasil 1 1484718297054 INFO DESKTOP-AD5AH36 idcenter 1 controller>>>>>>>>>>>>getUserList>>>>>>>>>>>> Yggdrasil 1 1484718297055 INFO DESKTOP-AD5AH36 idcenter 1 UserServiceImpl>>>>>>>>>>>>getUserList>>>>>>>>>>>> Yggdrasil 1 1484718297850 DEBUG DESKTOP-AD5AH36 idcenter 1 ==> Preparing: SELECT count(0) FROM (SELECT count(0) FROM users) table_count Yggdrasil 1 1484718297876 DEBUG DESKTOP-AD5AH36 idcenter 1 ==> Parameters: Yggdrasil 1 1484718297891 TRACE DESKTOP-AD5AH36 idcenter 1 <== Columns: count(0) Yggdrasil 1 1484718297891 TRACE DESKTOP-AD5AH36 idcenter 1 <== Row: 1 Yggdrasil 1 1484718297894 DEBUG DESKTOP-AD5AH36 idcenter 1 <== Total: 1 Yggdrasil 1 1484718297896 DEBUG DESKTOP-AD5AH36 idcenter 1 ==> Preparing: SELECT count(0) FROM users LIMIT 2 Yggdrasil 1 1484718297896 DEBUG DESKTOP-AD5AH36 idcenter 1 ==> Parameters: Yggdrasil 1 1484718297897 TRACE DESKTOP-AD5AH36 idcenter 1 <== Columns: count(0) Yggdrasil 1 1484718297897 TRACE DESKTOP-AD5AH36 idcenter 1 <== Row: 7 Yggdrasil 1 1484718297897 DEBUG DESKTOP-AD5AH36 idcenter 1 <== Total: 1 2017-01-18 13:44:57.927 ERROR 20852 --- [nio-7878-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: java.lang.NullPointerException
The error may exist in file [E:\JavaWork\Workspaces\GitHub\micro-service-users\target\classes\micro\service\users\mapper\UserMapper.xml]
The error may involve micro.service.users.mapper.UserMapper.getAllList_COUNT
The error occurred while handling results
SQL: SELECT count(0) FROM users LIMIT 2
Cause: java.lang.NullPointerException] with root cause
这个是打印出来的跟踪是这样的也报空指针错误
试试 1.1.0-beta 版本:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.0-beta</version>
</dependency>
我确实是集成了两个插件,嗯应该是一个插件集成了两次。在bean里加了个plugin在mybatis-config里又加了一遍,就出错了。去掉一个就好了
@abel533 确实 你的说明里这样写: 2. 配置拦截器插件
- 在 MyBatis 配置 xml 中配置拦截器插件
- 在 Spring 配置文件中配置拦截器插件
刚接触此插件的小伙伴会以为两个地方都配,结果就报空指针异常了
可以备注一下 配一个地方即可
(顺便膜拜一下大神 插件超好用)
@abel533 你这个是怎么处理的呢?我用了1.0.0的com.github.pagehelper:pagehelper-spring-boot-starter:1.1.0-beta的starter,就好了,没用之前报和上面的错误一模一样
pageHelper 5.0的bug吧,我换回4.2.1就不报错了 是不再报错了,但是分页还生效吗?