产生的问题:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.flamelp.dao.subject.SubjectMapper.getAll()" because "this.subjectMapper" is null
项目结构:
在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的问题。
因为SubjectServiceImpl中的mapper是由spring进行依赖注入的,在使用service被spring初始化的时候spring容器会根据依赖注入对应的mapper,但是您这里使用new的方式创建service实例,并不是有spring统一进行管理的,所以导致service进行实例化的时候mapper没有被注入进来,导致空指针异常。在spring项目中,除了pojo之外,大部分类都要由spring进行管理。
你不要new serviceimpl啊,通过注解注入进去,不然肯定空指针的
类似于这样的