You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决MyBatis中demoMapper Bean名称冲突错误?

问题描述

我遇到一个反复出现的错误,急需解决办法。我有一个名为demoMapper的Mapper接口,并且已经手动配置MyBatis在项目启动时初始化Bean文件,但出现了如下错误:

Annotation-specified bean name 'demoMapper' for bean class [com.example.demo.repository.mapper.DemoMapper] conflicts with existing, non-compatible bean definition of same name and class

我尝试创建了MyBatisConfig配置文件,代码如下:

package com.example.demo.config;

@Configuration
public class MyBatisConfig {

    private final SqlSessionFactory sqlSessionFactory;

    public MyBatisConfig(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Bean
    public MapperFactoryBean<DemoMapper> demoMapper() {
        MapperFactoryBean<DemoMapper> factoryBean = new MapperFactoryBean<>(DemoMapper.class);
        factoryBean.setSqlSessionFactory(sqlSessionFactory);
        return factoryBean;
    }
}
解决方法

错误核心是Spring容器里重复创建了同名同类型的demoMapper Bean,通常是同时用了两种Mapper注册方式导致的:

  • 检查自动扫描配置
    先确认项目启动类是否加了@MapperScan("com.example.demo.repository.mapper")注解,或者配置文件里是否开启了MyBatis的Mapper扫描路径。如果有,MyBatis会自动把DemoMapper接口注册为Spring Bean,和你手动通过MapperFactoryBean创建的Bean冲突。

  • 二选一解决
    方案1:删掉MyBatisConfig里的demoMapper() Bean方法,保留@MapperScan自动扫描——这是MyBatis整合SpringBoot的标准写法,更简洁。
    方案2:如果必须手动配置,就删除启动类上的@MapperScan注解,同时确保配置文件里没开Mapper自动扫描,只保留手动配置的MapperFactoryBean。

  • 额外排查
    确认DemoMapper接口上没加@Mapper注解,这个注解也会触发MyBatis自动注册Bean,和手动配置冲突。

内容的提问来源于stack exchange,提问作者Chilekesha Kasoka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:12:14