2013-03-07 109 views
3

我是一個試圖集成mybatis的新手。終於降落在這個空指針例外。MyBatis with Spring - 配置錯誤空指針異常

我POM

<dependency> 
     <groupId>org.mybatis</groupId> 
     <artifactId>mybatis-spring</artifactId> 
     <version>1.1.1</version> 
    </dependency> 

我的Spring配置

<bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/pages/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

<context:component-scan base-package="biz.canisrigel.slapMe" /> 

<!-- enable autowire --> 
<context:annotation-config /> 

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost/slapMe" /> 
    <property name="username" value="root" /> 
    <property name="password" value="adminadmin" /> 
</bean> 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="typeAliasesPackage" value="biz.canisrigel.slapMe.bean" /> 
</bean> 

<!-- scan for mappers and let them be autowired --> 
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="biz.canisrigel.slapMe.mapper" /> 
</bean> 

我映射

public interface UserMapper { 

UserBean getUser(); 

} 

<mapper namespace="biz.canisrigel.slapMe.mapper.UserMapper"> 

<select id="getUser" resultType="UserBean"> 
    Select * from Users where id = 1; 
</select> 

</mapper> 

用戶的Bean

只是幾個變量

吾道

@Service 
public class UserDao { 

@Autowired 
private UserMapper userMapper; 

public UserBean getUser(int id) { 

    if (userMapper == null) { 
     System.out.println("Errorrrrrr..................."); 
     // return new UserBean(); 
    } 
    return userMapper.getUser(); 
} 

} 

控制器

@Controller 
@RequestMapping("/authenticate") 
public class LoginController { 

@RequestMapping("/index") 
public String index() { 
    UserDao userDao = new UserDao(); 
    System.out.println(userDao.getUser(1).getPassword()); 
    return "Login"; 
} 

} 

錯誤

org.springframework.web.util.NestedServletException:請求處理失敗;嵌套異常是java.lang.NullPointerException org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:932) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816) javax.servlet .http.HttpServlet.service(HttpServlet.java:621)

回答

2

UserDao對象需要來自春對象存儲,以及你的映射。在您的index方法內部實例化UserDao對象將意味着您在撥打電話時映射器爲null,因爲Spring沒有爲您設置對象,因此無法自動連接映射器。

你將要使用的@Resource註釋,使您的UserDAO對象到控制器中,象下面這樣:

@Controller 
@RequestMapping("/authenticate") 
public class LoginController { 

    @Resource 
    UserDao userDao; 

    @RequestMapping("/index") 
    public String index() { 
     System.out.println(userDao.getUser(1).getPassword()); 
     return "Login"; 
    } 

} 
+0

這工作就像一個魅力。完善。 – 2013-03-08 02:41:16