在applicationContext.xml中定义了sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
定义一个Search类用于查询操作,希望通过注解的方式注入sqlSessionFactory
public class Search {
@Autowired
SqlSessionFactory sqlSessionFactory;
public void search(){
SqlSession session = sqlSessionFactory.openSession();
UserDao u=session.getMapper(UserDao.class);
User user=u.getUser(1);
System.out.println(user.getName());
}
}
定义一个Test类进行查询
public class Test {
public static void main(String[] args){
Search search=new Search();
search.search();
}
}
报空指针异常。
分析:这里直接使用了new 出一个Search的方式,那这个对象肯定不是收到spring容器管理的。这样子的话,spring容器又怎么能把sqlSessionFactory注入到你这个对象中呢?
所以正确的写法是这样子。
<bean id="search" class="com.kiruma.blog.dao.Search"></bean>
先在spring容器中定义出search ,然后在Test中启动容器,获取search, 这样才能实现自动装配。
public class Test {
public static void main(String[] args){
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Search search=(Search) context.getBean("search");
search.search();
}
}