SSB 框架注入mapper遇到的问题

(小白提问,有什么不对的指出来)上周遇到了一个问题,项目有点久,没有springMVC的框架,想集成进去,但是后来发现注解无法将mapper注入到容器项目结构
mapper就只是一个interface 的.java文件,然后在另一个包下面有映射的.xml文件
在此之前,我单独的将service注入到controller没问题,返回一个了Map在WEB上可以看到,但是我在service层用注解@不论是Res..还是Auto,,都会报错,我确认过配置扫描包路径都没有问题,迫不得已用了原先的配置文件方法,发现又可以了 上两个对比图 图片说明图片说明图片说明,新增配置文件如图图片说明,这是mapper现在有两个问题,为什么我配置文件可以,用注解却不行, 第二个,为什么我要用TestMapper mapper = ApplicationContextFactory.getBean("testMapper", TestMapper.class);才能取到mapper,直接用还是空?

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'planController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.zcloudMVC.service.TestService com.zcloudMVC.controller.PlanController.testService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.zcloudMVC.mapper.TestMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}

如果用注解的话,这是报错的原因

<!-- 文控管理Mapper映射,modify by 吴立君 -->
<!-- 扫描特定的包,自动成批创建映射器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.zcloudMVC.mapper,com.emacle.docm.mapper" />
    <property name="sqlSessionTemplateBeanName" value="sqlSession"/>
</bean>

这是扫描mapper路径

 <mvc:annotation-driven></mvc:annotation-driven> 
 <!-- 扫描路径 -->  
<context:component-scan base-package="com.zcloudMVC.controller" />
<context:component-scan base-package="com.zcloudMVC.service" />
<context:component-scan base-package="com.zcloudMVC.mapper" />

这是mvc注解扫描路径

mapper加个注解,@MapperScan

来人帮看一下呀 ,我刚刚又试了一下 在mapper 上加Repstory注解 ,去掉配置文件,都用@Resource,
Error creating bean with name 'testService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.zcloudMVC.mapper.TestMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. 创建service错误,这个意思应该就是mapper没有在容器里吧。

感觉是不是mybatis 动态代理mapper的问题啊,我又看到别人说是不是路径问题




我是这么配置的,在用配置文件的时候那个ref=“testMapper”没问题的




用了配置文件就报错。。。好奇怪

 <bean name="testService" class="com.zcloudMVC.service.TestServiceImpl">
    <property name="testMapper">
        <ref bean="testMapper" />
    </property>
</bean>  


    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.zcloudMVC.mapper,com.emacle.docm.mapper" />
    <property name="sqlSessionTemplateBeanName" value="sqlSession"/>
</bean>

TestMapper.xml放到com.zcloudMVC.mapper包下面
跟TestMapper.java同一目录试试

 (mapper代理开发规范)
程序员需要编写mapper.xml映射文件
程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
开发规范:
(1)在mapper.xml中namespace等于mapper接口地址
(2)mapper.java接口中的方法名和mapper.xml中statement的id一致
(3)mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
(4)mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
@Repository
public interface TestMapper {
 public List<User> findUserByName(String name); 
}
 <mapper namespace="com.zcloudMVC.mapper.TestMapper">
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.zcloudMVC.entity.User">
        select * from user where username LIKE '%${value}%'
    </select>
</mapper>

问题解决了,这个老项目之前的容器不是spring 是这个基础上修改的,具有IOC AOP的特性但是bean都不在spring里面,用的时候自然取不到mapper的bean ,那个application.getBean也是它们自己手写的获得自己容器的bean