簡體   English   中英

使用MyBatis的Java Mapper上的NullPointerException

[英]NullPointerException on java Mapper with MyBatis

我收到了NullPointerException ,我不知道我的錯誤在哪里。

錯誤在selectByExample函數中。 代碼是:

package com.service.test;

@Service 
public class TestService {
[...]
@Autowired
private TestMapper TestMapper;
[...]

public List<Short> test(){
    List<Short> lista = new ArrayList<Short>();

    testExample me = new testExample();
    me.or().andTestEqualTo(1);
    List<test> listTest = TestMapper.selectByExample(me); //line 81

    for(int i=0; i<listTest.size(); i++){
        lista.add(listTest.get(i).getNuovoDb());
    }

    return lista;
}

Controller.java

    TestService ms = new TestService();
    List<Short> listTest = ms.sediMigrate(); //line 46

applicationContext是以下內容:

       <!-- enable autowire -->
    <context:annotation-config />
    <context:component-scan base-package="com.service.test"/>
[...]


    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.test.**"/>
        <property name="sqlSessionFactoryBeanName" value="exSqlSessionFactory"/>
    </bean>

這里有錯誤:

[11/07/14 11.19.33:848 CEST] 0000004f servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper服務SRVE0068E:servozio del servlet調度程序nell'applicazione TestEAR中的Generata eccezione non rilevata。 Creata eccezione:org.springframework.web.util.NestedServletException:請求處理失敗; 嵌套的異常是org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)處的java.lang.NullPointerException org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)處的javax.servlet的org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)的.http.HttpServlet.service(HttpServlet.java:738)的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)的。 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)上的com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)。 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)處的servlet.ServletWrapper.handleRequest(ServletWrapper.java:502) com.ibm.ws.webcontainer.webapp.WebGroup.handle中的java:3935)com.ibm.ws.webcontainer.WebContainer.handle中的Request(WebGroup.java:276) com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)處的com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)處的Request(WebContainer.java:931) com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)上的.ibm.ws.http.channel.inbound.impl.HttpInboundLink.java:452 com上的.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) .ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)位於com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)位於com.ibm.io.async.AsyncChannelFuture com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)處com.ibm.io.async.ResultHandler.complete(ResultHandler.java:2)的.fireCompletionActions(AsyncChannelFuture.java:161) 04)在com.ibm.ws.util上的com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)在com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)處。 ThreadPool $ Worker.run(ThreadPool.java:1613)由以下原因引起:com.test.controller.ReturnPage(controller.java:com.service.test.TestService.test(TestService.java:81)處的java.lang.NullPointerException 46)at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)at java.lang.reflect處sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod處的.Method.invoke(Method.java:600)在org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) (AnnotationMethodHandlerAdapter.java:446)在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.han org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)的dle(AnnotationMethodHandlerAdapter.java:434)org.springframework的org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)的dle(AnnotationMethodHandlerAdapter.java:434) .web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)...還有25個

[11/07/14 11.19.33:856 CEST] 0000004f FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider log事件FFDC1003I:C:\\ Program Files \\ IBM \\ WebSphere \\ AppServer \\ profiles \\ AppSrv01 \\中的Emesso甚至到FFDC logs \\ ffdc \\ server1_5e0b5e0b_14.07.11_11.19.33.8537970037945028520520.txt com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest()309 [11/07/14 11.19.33:857 CEST] 0000004f webapp E com.ibm。 ws.webcontainer.webapp.WebApp logServletError SRVE0293E:[錯誤servlet]-[調度程序]:com.test.controller.ReturnPage(com.service.test.TestService.test(TestService.java:81)處的java.lang.NullPointerException controller.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(Handler上的.lang.reflect.Method.invoke(Method.java:600) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)處的MethodInvoker.java:175)org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java: 434)在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)在org.springframework.web.servlet.FrameworkServlet org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)的java.servlet.http.HttpServlet.service(HttpServlet.java:738)的.processRequest(FrameworkServlet.java:961)。位於com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java)上的javax.servlet.http.HttpServlet.service(HttpServlet.java:831)上的web.servlet.FrameworkServlet.service(FrameworkServlet.java:837): 1657),網址為com.ibm.ws.webcontainer.servlet.ServletW com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)的com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:的rapper.handleRequest(ServletWrapper.java:939): 181)位於com.ibm.ws.webcontainer.webapp.Webapp.WebApp.handleRequest(WebApp.java:3935)位於com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)位於com.ibm.ws com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)上的.webcontainer.WebContainer.handleRequest(WebContainer.java:931)在com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java :186),位於com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452),位於com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java :511)在com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)在com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCa com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)上com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)上的llback.java:83) .ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)位於com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)位於com.ibm.io.async.ResultHandler.complete(ResultHandler .java:204)com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:905)com.ibm.ws .util.ThreadPool $ Worker.run(ThreadPool.java:1613)

使用Spring時,應避免顯式創建bean(使用new運算符)-框架應為您完成。 並且bean實例應該已經在Spring上下文中。 如果用new實例化服務Bean,則不會自動裝配任何東西。 這就是為什么您將使用null而不是您的mapper實例的原因。

請查看有關Spring應用程序中的依賴項注入和bean生命周期的Spring文檔http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-factory-collaborators

更新:

TestService自動TestService到控制器中可能會解決您的問題。

@Controller
public class Controller {
    @Autowired private TestService testService;
    ...
    @RequestMapping
    public String returnPage() {
        ...
        testService.sediMigrate(); 
        ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM