springMVC mybatis mapper注入失败

__LLLL__ 2016-12-05 05:55:04
今天突发奇想弄一个springMVC和mybatis整合的例子,mapper注入service一直失败,但是注入controller是成功的,具体配置如下:

<!-- sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 加载mybatis的全局配置文件 -->
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"></property> <!-- 这里另外配置mapper.xml路径 -->
</bean>

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="dao.UserMapper"/>
</bean>

<bean id="userService" class="service.impl.UserServiceImpl"/>


UserMapper是一个接口,
UserServiceImpl代码如下:

@Autowired
private UserMapper userMapper;//一直运行的时候一直为空,抛出空指针异常

public List<User> getUserList() {
return Collections.emptyList();
}

public User getUserById(long id){
return userMapper.selectByPrimaryKey(id);
}




在controller里面可以注入成功

@Controller
public class UserController {

@Autowired
private UserService userService;

@Autowired
private UserMapper userMapper;

/**
*
* @param modelMap
* @return
*/
@RequestMapping("/userLogin")
public String userLogin(ModelMap modelMap,Long id) {
User user = userService.getUserById(id);
modelMap.put("name", user.getName());
modelMap.put("age", user.getAge());
return "/success";
}

...全文
3094 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn2737112562 2017-12-29
  • 打赏
  • 举报
回复
注意: Dao接口及Mapper在同一目录下。并同名 说出来都是 坑 啊 啊啊
xiaoxiaoyunlu 2017-12-11
  • 打赏
  • 举报
回复
引用 17 楼 qq_15824553 的回复:
[quote=引用 16 楼 afsvsv 的回复:] 同求,现在就是想删除多用的配置文件,改为注解去实现, mapper 也是一直无法注入,提示No matching bean of type [com.droi.mapper.AccountUserMapper] found 这样貌似是没有扫描到mapper,没有加入spring 管理,<context:component-scan base-package="com.droi.service"/><context:component-scan base-package="com.droi.mapper" />,都加了,还是同样的错误,求大神指导一下,谢谢!
确认mapper被扫到,mapper注入和service不一样
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.xes.dao.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
[/quote] 这个也配置过了 ,还是同样的问题啊
RockeyCui 2017-12-11
  • 打赏
  • 举报
回复
引用 16 楼 afsvsv 的回复:
同求,现在就是想删除多用的配置文件,改为注解去实现, mapper 也是一直无法注入,提示No matching bean of type [com.droi.mapper.AccountUserMapper] found 这样貌似是没有扫描到mapper,没有加入spring 管理,<context:component-scan base-package="com.droi.service"/><context:component-scan base-package="com.droi.mapper" />,都加了,还是同样的错误,求大神指导一下,谢谢!
确认mapper被扫到,mapper注入和service不一样
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.xes.dao.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
xiaoxiaoyunlu 2017-12-11
  • 打赏
  • 举报
回复
纠结了几天,还是自己解决了,同时总结了一下,http://blog.csdn.net/afsvsv/article/details/78771591
xiaoxiaoyunlu 2017-12-10
  • 打赏
  • 举报
回复
同求,现在就是想删除多用的配置文件,改为注解去实现, mapper 也是一直无法注入,提示No matching bean of type [com.droi.mapper.AccountUserMapper] found 这样貌似是没有扫描到mapper,没有加入spring 管理,<context:component-scan base-package="com.droi.service"/><context:component-scan base-package="com.droi.mapper" />,都加了,还是同样的错误,求大神指导一下,谢谢!
doggy1853 2017-08-13
  • 打赏
  • 举报
回复
<bean id="userService" class="service.impl.UserServiceImpl" autowire="byType"> //少了属性了
qq_28147505 2017-08-10
  • 打赏
  • 举报
回复
最讨厌这种问问题,解决了,都不会公布答案的人。
VickyDan_s 2017-06-09
  • 打赏
  • 举报
回复
最后怎么解决的??我也遇到了同样的问题?求解决方法
_ljming 2016-12-09
  • 打赏
  • 举报
回复
<bean id="userService" class="service.impl.UserServiceImpl"> <property id="userMapper" ref="userMapper"/> </bean> 这样就OK了
big_bow 2016-12-08
  • 打赏
  • 举报
回复
你没加controller 层的注解扫描吧...
浮云若水 2016-12-06
  • 打赏
  • 举报
回复
注意下:spring 中在配置文件中配置的bean对象中的注解,如果没有添加注解扫描是不生效的,所以如果想你service中的注解生效,就必须把你service所在的包,添加注解扫描
浮云若水 2016-12-06
  • 打赏
  • 举报
回复
引用 3 楼 lilei_ndsc 的回复:
[quote=引用 1 楼 fangmingshijie 的回复:] 包有没有扫描到,用set方式看下行不行
包应该是扫描到了,因为我直接在controller层注入mapper是可以的 set方式尝试过也不行, @resource也试过不行 但是如果我service的bean的配置里面注入mapper就是可以的 <bean id="service" class="xxxxxxx"> <property name="mapper" ref="xxx"/> </bean> 这样可以注入成功[/quote] 因为你的service 不是采用的注解 所以在扫描 注解的时候 你的service中的注解是不被扫描的 ,你service采用的是配置bean 在service实现类上加上 @service 注解 然后再把service所在的包 加入扫描包中,这个和你的dao层能不能被映射到是两码事。
__LLLL__ 2016-12-06
  • 打赏
  • 举报
回复
引用 2 楼 m2200 的回复:
这样配,会扫描com.cn.hnust.dao包底下的dao接口:
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.cn.hnust.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>
麻烦大侠看下问题,辛苦了,我想要的是问题的答案而不是另一条路
__LLLL__ 2016-12-06
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
包有没有扫描到,用set方式看下行不行
包应该是扫描到了,因为我直接在controller层注入mapper是可以的 set方式尝试过也不行, @resource也试过不行 但是如果我service的bean的配置里面注入mapper就是可以的 <bean id="service" class="xxxxxxx"> <property name="mapper" ref="xxx"/> </bean> 这样可以注入成功
浮云若水 2016-12-06
  • 打赏
  • 举报
回复
引用 7 楼 lilei_ndsc 的回复:
[quote=引用 6 楼 a276202031 的回复:] 注意下:spring 中在配置文件中配置的bean对象中的注解,如果没有添加注解扫描是不生效的,所以如果想你service中的注解生效,就必须把你service所在的包,添加注解扫描
那我把service所在的包添加了注解扫描,service是要不要加@service注解呢?,加了注解那配置项是不是可以删除了?[/quote] 对的 你配置了就没必要加service注解 加了注解就没必要配置
__LLLL__ 2016-12-06
  • 打赏
  • 举报
回复
引用 6 楼 a276202031 的回复:
注意下:spring 中在配置文件中配置的bean对象中的注解,如果没有添加注解扫描是不生效的,所以如果想你service中的注解生效,就必须把你service所在的包,添加注解扫描
那我把service所在的包添加了注解扫描,service是要不要加@service注解呢?,加了注解那配置项是不是可以删除了?
爱睡觉的阿狸 2016-12-05
  • 打赏
  • 举报
回复
这样配,会扫描com.cn.hnust.dao包底下的dao接口:
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.cn.hnust.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>
  • 打赏
  • 举报
回复
包有没有扫描到,用set方式看下行不行

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧