1.报错描述:
**No qualifying bean of type [main.java.base.dao.MyMapper] is defined: expected single matching bean but found 2: attachmentMapper,userMapper。**
2.其他说明:
当只有一个User表时,是不报错的(说明通用mapper的配置没错),但是添加了一个新表Attachment和Attachment表相关代码后,就报这错了。
3.其他代码:
a. 有业务表User表,Attachment表;对应mapper:UserMapper.java和AttachmentMapper.java;对应业务接口UserService.java和AttachmentService.java;接口对应相应的实现类UserServiceImpl.java和AttachmentServiceImpl.java。
b. 有自定义通用mapper:MyMapper.java。通用业务处理接口BaseService.java和对应接口实现类BaseServiceImpl.java。
c. 继承描述:
1. 自定义的MyMapper.java继承Mapper<T>,InsertListMapper<T>,IdsMapper<T>。如下:
public interface MyMapper<T> extends
Mapper<T>,
InsertListMapper<T>,
IdsMapper<T>{
}
2. UserMapper.java和AttachmentMapper.java都继承MyMapper.java。如下:
public interface UserMapper extends MyMapper<User>{}
public interface AttachmentMapper extends MyMapper<Attachment>{}
3. UserService.java和AttachmentService都继承BaseService.java。如下:
public interface AttachmentServiceextends BaseService<User>{}
public interface AttachmentService extends BaseService<Attachment>{}
4. UserServiceImpl.java和AttachmentServiceImpl都继承BaseServiceImpl.java,如下:
@Service
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService{}
@Service
public class AttachmentServiceImpl extends BaseServiceImpl<Attachment> implements AttachmentService{}
d. BaseService.java通用业务类如下:
public interface BaseService<T> {
public List<T> select(T record);
}
3. BaseServiceImpl.java如下:
@Service
public class BaseServiceImpl<T> implements BaseService<T> {
@Resource
private MyMapper<T> mapper;
@Override
public List<T> select(T record) {
return mapper.select(record);
}
}
e. 配置文件。application-context.xml。通用mapper配置:
<!-- 使用自定义的MyMapper,方便以后扩展 -->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="main.java.dao"/>
<property name="properties" value="main.java.base.dao.MyMapper"/>
</bean>
必须要在通用Mapper上把@Resource换成@Autowired,这样就解决了