当前位置: 首页 > 知识库问答 >
问题:

使用MyBatis的java映射器上的NullPointerException

易俊远
2023-03-14

我得到了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;
}

控制器。JAVA

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

应用上下文如下:

       <!-- 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]000000 4F servlet电子商务。国际商用机器公司ws。网络容器。servlet。ServletWrapper服务SRVE0068E:在uno dei metodi di servlet dispatcher nell'Applicatione TestEAR中生成eccezione non-rilevata。创建一个eccezione:org。springframework。网状物util。NestedServletException:请求处理失败;嵌套的异常是java。org上的lang.NullPointerException。springframework。网状物servlet。FrameworkServlet。org上的processRequest(FrameworkServlet.java:973)。springframework。网状物servlet。FrameworkServlet。javax上的doPost(FrameworkServlet.java:863)。servlet。http。HttpServlet。服务(HttpServlet.java:738)位于org。springframework。网状物servlet。FrameworkServlet。javax上的服务(FrameworkServlet.java:837)。servlet。http。HttpServlet。com上的服务(HttpServlet.java:831)。国际商用机器公司ws。网络容器。servlet。ServletWrapper。com上的服务(ServletWrapper.java:1657)。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest(ServletWrapper.java:939)位于com。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest(ServletWrapper.java:502)位于com。国际商用机器公司ws。网络容器。servlet。ServletWrapperImpl。handleRequest(ServletWrapperImpl.java:181)位于com。国际商用机器公司ws。网络容器。网络应用。网络应用。HandlerRequest(WebApp.java:3935)位于com。国际商用机器公司ws。网络容器。网络应用。网络组。HandlerRequest(WebGroup.java:276)位于com。国际商用机器公司ws。网络容器。网络容器。HandlerRequest(WebContainer.java:931)位于com。国际商用机器公司ws。网络容器。WSWebContainer。handleRequest(WSWebContainer.java:1592)位于com。国际商用机器公司ws。网络容器。频道WCChannelLink。com上的ready(WCChannelLink.java:186)。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。在com上处理歧视(HttpInboundLink.java:452)。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。handleNewRequest(HttpInboundLink.java:511)位于com。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。com上的processRequest(HttpInboundLink.java:305)。国际商用机器公司ws。http。频道入境。impl。HttpICLReadCallback。在com上完成(HttpICLReadCallback.java:83)。国际商用机器公司ws。tcp。频道impl。AioReadCompletionListener。FutureCompletionListener(AioReadCompletionListener.java:165)在com上完成。国际商用机器公司木卫一。异步的。抽象的未来。com上的invokeCallback(AbstractAsyncFuture.java:217)。国际商用机器公司木卫一。异步的。未来。com上的fireCompletionActions(AsyncChannelFuture.java:161)。国际商用机器公司木卫一。异步的。未来。已在com上完成(AsyncFuture.java:138)。国际商用机器公司木卫一。异步的。结果德勒。在com上完成(resultandler.java:204)。国际商用机器公司木卫一。异步的。结果德勒。在com上运行EventProcessingLoop(ResultHandler.java:775)。国际商用机器公司木卫一。异步的。ResultHandler 2美元。在com上运行(resultandler.java:905)。国际商用机器公司ws。util。线程池$Worker。运行(ThreadPool.java:1613)的原因是:java。com上的lang.NullPointerException。服务测验测试服务。在com上测试(TestService.java:81)。测验控制器。sun上的ReturnPage(controller.java:46)。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:48)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:25)。朗。反思。方法在org调用(Method.java:600)。springframework。网状物绑定注释。支持HandlerMethodInvoker。org上的invokeHandlerMethod(HandlerMethodInvoker.java:175)。springframework。网状物servlet。mvc。注释。注释方法HandlerAdapter。org上的invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)。springframework。网状物servlet。mvc。注释。注释方法HandlerAdapter。handle(AnnotationMethodHandlerAdapter.java:434)位于org。springframework。网状物servlet。调度员服务。doDispatch(DispatcherServlet.java:938)位于org。springframework。网状物servlet。调度员服务。doService(DispatcherServlet.java:870)位于org。springframework。网状物servlet。FrameworkServlet。processRequest(FrameworkServlet.java:961)。。。25多

[11/07/14 11.19.33:856 CEST]000000 4F FFDCW公司。国际商用机器公司ws。ffdc。impl。FfdcProvider logIncident FFDC1003I:C:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\FFDC\server1_5e0b5e0b_14.07.11_11.19.33.8537970037945028520402中的Emesso evento FFDC。txt com。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest()309[11/07/1411.19.33:857 CEST]0000004f网络应用电子商务。国际商用机器公司ws。网络容器。网络应用。WebApp logServletError SRVE0293E:[错误servlet]-[调度程序]:java。com上的lang.NullPointerException。服务测验测试服务。在com上测试(TestService.java:81)。测验控制器。sun上的ReturnPage(controller.java:46)。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:48)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:25)。朗。反思。方法在org调用(Method.java:600)。springframework。网状物绑定注释。支持HandlerMethodInvoker。org上的invokeHandlerMethod(HandlerMethodInvoker.java:175)。springframework。网状物servlet。mvc。注释。注释方法HandlerAdapter。org上的invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)。springframework。网状物servlet。mvc。注释。注释方法HandlerAdapter。handle(AnnotationMethodHandlerAdapter.java:434)位于org。springframework。网状物servlet。调度员服务。doDispatch(DispatcherServlet.java:938)位于org。springframework。网状物servlet。调度员服务。doService(DispatcherServlet.java:870)位于org。springframework。网状物servlet。FrameworkServlet。org上的processRequest(FrameworkServlet.java:961)。springframework。网状物servlet。FrameworkServlet。javax上的doPost(FrameworkServlet.java:863)。servlet。http。HttpServlet。服务(HttpServlet.java:738)位于org。springframework。网状物servlet。FrameworkServlet。javax上的服务(FrameworkServlet.java:837)。servlet。http。HttpServlet。com上的服务(HttpServlet.java:831)。国际商用机器公司ws。网络容器。servlet。ServletWrapper。com上的服务(ServletWrapper.java:1657)。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest(ServletWrapper.java:939)位于com。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest(ServletWrapper.java:502)位于com。国际商用机器公司ws。网络容器。servlet。ServletWrapperImpl。handleRequest(ServletWrapperImpl.java:181)位于com。国际商用机器公司ws。网络容器。网络应用。网络应用。HandlerRequest(WebApp.java:3935)位于com。国际商用机器公司ws。网络容器。网络应用。网络组。HandlerRequest(WebGroup.java:276)位于com。国际商用机器公司ws。网络容器。网络容器。HandlerRequest(WebContainer.java:931)位于com。国际商用机器公司ws。网络容器。WSWebContainer。handleRequest(WSWebContainer.java:1592)位于com。国际商用机器公司ws。网络容器。频道WCChannelLink。com上的ready(WCChannelLink.java:186)。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。在com上处理歧视(HttpInboundLink.java:452)。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。handleNewRequest(HttpInboundLink.java:511)位于com。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。com上的processRequest(HttpInboundLink.java:305)。国际商用机器公司ws。http。频道入境。impl。HttpICLReadCallback。在com上完成(HttpICLReadCallback.java:83)。国际商用机器公司ws。tcp。频道impl。AioReadCompletionListener。FutureCompletionListener(AioReadCompletionListener.java:165)在com上完成。国际商用机器公司木卫一。异步的。抽象的未来。com上的invokeCallback(AbstractAsyncFuture.java:217)。国际商用机器公司木卫一。异步的。未来。com上的fireCompletionActions(AsyncChannelFuture.java:161)。国际商用机器公司木卫一。异步的。未来。已在com上完成(AsyncFuture.java:138)。国际商用机器公司木卫一。异步的。结果德勒。在com上完成(resultandler.java:204)。国际商用机器公司木卫一。异步的。结果德勒。在com上运行EventProcessingLoop(ResultHandler.java:775)。国际商用机器公司木卫一。异步的。ResultHandler 2美元。在com上运行(resultandler.java:905)。国际商用机器公司ws。util。线程池$Worker。运行(ThreadPool.java:1613)

共有1个答案

邵祺
2023-03-14

当您使用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-工厂合作者

更新:

TestService自动连接到控制器中可能会解决您的问题。

@Controller
public class Controller {
    @Autowired private TestService testService;
    ...
    @RequestMapping
    public String returnPage() {
        ...
        testService.sediMigrate(); 
        ...
    }
}
 类似资料:
  • 我使用Java.time.LocalDate(Java8)来表示Java类中的一些成员字段。 我也在使用mybatis,与我的数据库交互。 这是因为mybatis目前没有“timestamp”(SQL Server)到java.time的映射吗? 我应该如何使用java.time.LocalDate来映射MyBatis?

  • 主要内容:XML实现映射器,注解实现映射器,MyBatis 映射器的主要元素映射器是 MyBatis 中最重要的文件,文件中包含一组 SQL 语句(例如查询、添加、删除、修改),这些语句称为映射语句或映射 SQL 语句。 映射器由 Java 接口和 XML 文件(或注解)共同组成,它的作用如下。 定义参数类型 配置缓存 提供 SQL 语句和动态 SQL 定义查询结果和 POJO 的映射关系 映射器有以下两种实现方式。 通过 XML 文件方式实现,比如我们在 mybatis

  • 问题内容: 我正在使用java.time.LocalDate(Java 8)表示Java类中的某些成员字段。 我还使用mybatis与我的数据库进行交互。 从数据库检索某些数据时,所有其他字段都将正确填充,但startDate和endDate字段最终将为null。 但是,如果我使用java.util.Date,例如 当我将它们声明为java.util.Date时,可以在这两个字段(startDat

  • 本文向大家介绍MyBatis 引入映射器的方法,包括了MyBatis 引入映射器的方法的使用技巧和注意事项,需要的朋友参考一下 mybatis引入映射器分为三种方式 1. 文件路径引入映射器 用包名引入映射器 用类注册引入映射器 用userMapper引入映射器 总结 以上所述是小编给大家介绍的MyBatis 引入映射器的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的

  • 本文向大家介绍Java的MyBatis框架中XML映射缓存的使用教程,包括了Java的MyBatis框架中XML映射缓存的使用教程的使用技巧和注意事项,需要的朋友参考一下 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: 字面上看就是这样。这个简单语句的效果如下: 1.映射语句文件中的所有s

  • 在mapper中,我调用了一个proc'xyz',它返回所查询的ProcessType表的行列表的光标。