flame.liu 2023-05-08 15:44 采纳率: 75%
浏览 38
已结题

SSM中Service调用Dao的方法显示对象为null

产生的问题:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.flamelp.dao.subject.SubjectMapper.getAll()" because "this.subjectMapper" is null

项目结构:

img

在mybatis-config.xml文件中设置了

    <typeAliases>
        <package name="com.flamelp.entity"/>
    </typeAliases>

applicationContext.xml文件中配置了以下内容,为了缩小检查范围,只设置了SubjectMapper的映射

<!-- 数据库连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/stu_manager" />
        <property name="username" value="root" />
        <property name="password" value="sasa" />
        <!--连接池的最大数据库连接数 -->
        <property name="maxTotal" value="255" />
        <!--最大等待连接中的数量 -->
        <property name="maxIdle" value="5" />
        <!--最大等待毫秒数 -->
        <property name="maxWaitMillis" value="10000" />
    </bean>

    <!--    根据数据源创建sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--设置数据sqlSessionFactory引用数据源-->
        <property name="dataSource" ref="dataSource" />
        <!--与mybatis的配置文件相关联,主要是对应的实体类的别名-->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!--配置Dao类对应的SQL语句映射的XML文件-->
        <property name="mapperLocations">
            <list>
                <!--表示dao包里面任意包下面的xml文件都加入映射-->
                <value>classpath:com/flamelp/dao/subject/*.xml</value>
            </list>
        </property>
    </bean>

    <!--自动扫描包里面的接口,并将其配置成bean-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.flamelp.dao.subject"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

service层中的代码

@Service
public class SubjectServiceImpl implements SubjectService {
    @Autowired
    private SubjectMapper subjectMapper;

    @Override
    public List<Subject> getAll() {
        return subjectMapper.getAll();
    }
}

在入口程序main方法中调用:

SubjectService subjectService = new SubjectServiceImpl();
List<Subject> subList = subjectService.getAll();

运行时出现"this.subjectMapper" is null的问题。

  • 写回答

2条回答 默认 最新

  • 清洲 2023-05-08 18:03
    关注

    因为SubjectServiceImpl中的mapper是由spring进行依赖注入的,在使用service被spring初始化的时候spring容器会根据依赖注入对应的mapper,但是您这里使用new的方式创建service实例,并不是有spring统一进行管理的,所以导致service进行实例化的时候mapper没有被注入进来,导致空指针异常。在spring项目中,除了pojo之外,大部分类都要由spring进行管理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 已采纳回答 6月7日
  • 创建了问题 5月8日

悬赏问题

  • ¥15 rexroth indramotion MTX micro系统轴耦合编程
  • ¥20 dify的代码解释器工具和代码执行节点有什么区别?代码解释器工具怎么用?
  • ¥100 springboot2.7.x 整合 sharding 的问题
  • ¥15 如何通过命令行操作统信360安全浏览器?
  • ¥15 upload-labs-master第三关
  • ¥15 关于LT3758反激式负压电源,功率三极管烧毁的问题
  • ¥20 aruba ap305 CAP转IAP
  • ¥20 rockchip rk3588 ffmedia运行异常
  • ¥30 如何用 Java 简单系统设计?(相关搜索:服务器|面向对象设计|随机数)
  • ¥15 鸿蒙开发(关键词-开发环境)