mybatis 注入mapper的问题 5C

mybatis动态代理mapper(interface),然后用@Res..注入一直报错,然后无奈用了配置文件,
在service层用get/set方法来做,发现这个MAPPER还是空的!!

@Service("testService")
public class TestServiceImpl implements TestService{

private TestMapper testMapper;


public TestMapper getTestMapper() {
    return testMapper;
}


public void setTestMapper(TestMapper testMapper) {
    this.testMapper = testMapper;
}


@Transactional
@Override
public Object tset1(){  
    TestMapper mapper = ApplicationContextFactory.getBean("testMapper", TestMapper.class);
    mapper.insertOne();
    throw new RuntimeException("test");
}

}

如上,但是ApplicationContextFactory.getBean又可以取到并且操作,扫描包应是没问题的,不然应该会报错吧

12个回答

@Autowired
private TestMapper testMapper;

qq_39015948
qq_39015948 试过的 报错了
一年多之前 回复

你mapper加上
@Component("testmapper")
@Mapper
public interface TestMapper{

用@Resource注入试一试
@Resource(name="testmapper")
private TestMapper testMapper;

qq_39015948
qq_39015948 试了一下还是不行 ,用注解的话,找不到testMapeer这个bean
一年多之前 回复

你的类变量testMapper只是声明了bean,但是并没有注入到这个类里面来。
这段代码看起来并没有错误。不过有可能是因为没有截图完。
@Autowired/@resource两个注解都是可以的。
private TestMapper testMapper;

aquriushu
aquriushu 没有被扫描到的bean里注入bean当然是注入不成功的。另外,注入bean不用再添加get/set
一年多之前 回复
aquriushu
aquriushu 回复qq_39015948: testService都没有被扫描到啊亲
一年多之前 回复
qq_39015948
qq_39015948 用注解的话就会报错,可以看我昨天才发的一个问题,也是这个,NoSeachBean的那个错误,这个bean只用通过appliciton.getBean可以取到,我也不知道为什么
一年多之前 回复

org.springframework.beans.factory.BeanCreationException: 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. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}
这是用注解报的错





这是配置文件,mapper注入到service的


@Service("testService")

public class TestServiceImpl implements TestService{

private TestMapper testMapper;


public TestMapper getTestMapper() {
    return testMapper;
}


public void setTestMapper(TestMapper testMapper) {
    this.testMapper = testMapper;
}


@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)
@Override
public Object tset1(){  
    TestMapper mapper = ApplicationContextFactory.getBean("testMapper", TestMapper.class);
    mapper.insertOne();
    throw new RuntimeException("test");
}

}

用配置文件方式的service

mapper 相当于hibernate的dao 组件了,需要被spring扫描到,检查一下spring的配置文件:

....



qq_39015948
qq_39015948 我在spring里面配置了扫描service和mapper的,但是mybatis代理了mapper不是自动注入进容器了嘛,关键是getBean是可以取到的,注解却不行
一年多之前 回复
<bean name="testService" class="com.zcloudMVC.service.impl.TestServiceImpl">
    <property name="testMapper">
        <ref bean="testMapper" />
    </property>
</bean>

这是配置文件mapper到 service的

哎呦, 手敲的代码竟然都不见了


<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xxx.xxx.*.dao" />
</bean>
qq_39015948
qq_39015948 你看看楼下,是我的,这个是没问题的
一年多之前 回复
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.zcloudMVC.mapper;com.emacle.docm.mapper" />
</bean>
共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!