2012-08-02 85 views
1

注入豆我試圖用彈簧3我收到以下錯誤在春季和MyBatis的配置

Error creating bean with name 'loginController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userMapper' is defined 

對於UserMapper配置MyBatis的interfcae我已經這樣做了。

@Service("userMapper") 
@Transactional 
public interface UserMapper { 

// methods here 

} 

我的控制器類是

@Controller 
@RequestMapping("/") 
public class LoginController 
{ 
static final Logger logger = Logger.getLogger(LoginController.class); 

@Resource(name = "userMapper") 
private UserMapper userMapper; 

@RequestMapping("/login") 
public ModelAndView login(@ModelAttribute User userBean){ 


    return new ModelAndView("login", "userBean", userBean); 

} 

} 

我的彈簧servelet.xml是

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.1.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> 


<!-- Enable annotation driven controllers, validation etc... --> 
<mvc:annotation-driven /> 


<context:component-scan 
    base-package="com.mycom.myproject" /> 

<mvc:resources mapping="/resources/**" location="/resources/" /> 


<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost/mydatabase"/> 
    <property name="username" value="root"/> 
    <property name="password" value="root"/> 
</bean> 

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="com.mycom.mydatabase.db.mybatis.sqlmap" /> 
</bean> 

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

所以,我怎麼能在這裏注入的相關性和可訪問我的數據庫方法。如果有什麼不清楚的話,請讓我來。

+0

他們對Spring和MyBatis有很好的指導。 http://www.mybatis.org/spring/sample.html – jasop 2012-08-10 06:03:48

回答

1

在你UserMapper接口,記下如下─

public interface UserMapper { 

//for example, saveUser will save data in your table taking User as bean 
public void saveUser(User user); 
} 

然後保持像如下─

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 

<mapper namespace="com.puneet.persistance.UserMapper"> 
<insert id="saveUser" parameterType="com.puneet.spring3.beans.User"> 
     INSERT INTO USER (username,password) 
     VALUES (#{username},#{password}) 
    </insert> 
</mapper> 

一個UserMapper.xml文件在我們提到上面的查詢XML文件的界面,你正在參考。

在你的LoginController

,打電話給你的方法如下─一樣

@RequestMapping(method=RequestMethod.POST) 
    public ModelAndView add(@ModelAttribute(value="user")User user,BindingResult result){ 

     ModelAndView mv = new ModelAndView("yourjpspage"); 
     if(!result.hasErrors()){ 
      userMapper.saveUser(user); 
      user = new User(); 

     } 
     return mv; 
    } 

在最後保持在彈簧servelet.xml文件中的所有配置。

希望首先會幫助你。

-1

UserMapper是一個接口,因此不能被注入。您需要在您的XML配置中配置一個實現。

+0

謝謝Aaron,我對Mybatis不太瞭解。那麼,我應該如何在這裏注入bean這裏應該是服務類 – user965884 2012-08-02 15:57:30

+0

這與iBatis完全無關。您需要編寫一個實現UserMapper的類,並將該類配置爲Spring XML中id爲userMapper的bean。 – 2012-08-03 07:36:12

+0

嗨,Aaron,我正在閱讀{http://www.raistudies.com/spring/integrating-mybatis-3-and-spring-frameworks-part-2/}上的一篇文章,它說:「我們不必實施作爲MyBatis的接口將爲此提供代理實現「 – user965884 2012-08-03 10:45:19