Springboot 集成 Mybatis,不同package下同名mapper启动报错

Mybatis不同包里出现了同名类,启动时报错如下:

org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'sysSetMapper' for bean class [com.onlyas.appserver.dao.SysSetMapper] conflicts with existing, non-compatible bean definition of same name and class [com.onlyas.appserver.dao.dbo.SysSetMapper]

通过查看Spring源码得知,当我们使用注解创建bean时,spring使用了AnnotationBeanNameGenerator来创建bean的名称。
解决方案:自己写一个Generator吧。如下:

@SpringBootApplication
@ComponentScan(nameGenerator = MultidataApplication.SpringBeanNameGenerator.class)
public class MultidataApplication {

    public static class SpringBeanNameGenerator extends AnnotationBeanNameGenerator {
        @Override
        protected String buildDefaultBeanName(BeanDefinition definition) {
            return definition.getBeanClassName();
        }
    }

    public static void main(String[] args) {
        SpringApplication.run(MultidataApplication.class, args);
    }

}

Mybatis的MapperScan里新增:

nameGenerator = MultidataApplication.SpringBeanNameGenerator.class

示例:

@MapperScan(basePackages="com.onlyas.appserver.dao", nameGenerator = MultidataApplication.SpringBeanNameGenerator.class)

好了,这样再运行起来就不会报错了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容