当前使用版本(必填,否则不予处理)

3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

例如,我在Dao层写一个接口

public interface ConfigDao {
    ConfigDO selectById(String configId);
}

@Data
public class ConfigDO {
    String configId;

    String configType;

    String fileType;

    String filePath;

    Date updateTime;

    Date createTime;
}

写一个Mapper

@Mapper
public interface ConfigMapper  extends BaseMapper<ConfigPO> {
}

@Data
@TableName(value = "config")
public class ConfigPO {

    @TableId(type = IdType.ASSIGN_UUID)
    String configId;

    String configType;

    String fileType;

    String filePath;

    Date updateTime;

    Date createTime;
}

然后实现这个接口

//@Component("_configDao")
@Component
public class ConfigDaoImpl implements ConfigDao {

    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    @Autowired
    ConfigMapper configMapper;

    @Override
    public ConfigDO selectById(String configId) {
        ConfigPO configPO = configMapper.selectById(configId);
        if(configPO == null){
            return null;
        }
        return BeanCopyUtil.copy(configPO, ConfigDO.class);
    }
}

这样的话,当我想注入自己写的configDao这个bean的时候会发生问题

   @Autowired
    ConfigDao configDao;

    @Test
    public void test() {
        ConfigDO configDo = configDao.selectById("abc");
        System.out.println(configDo);
    }

因为MP已经自动生成了一个名字为configDao的bean,上述写法没有绑定我自己实现的configDao。 现在我只能把bean的名字重命名为_configDao

我该如何禁止自动生成Dao层的bean?

因为我只想使用基本的BaseMapper的crud

重现步骤(如果有就写完整)

如上所述

报错信息

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): net.enniot.esk.datacore.dao.api.ConfigDao.selectById

    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
    at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.<init>(MybatisMapperMethod.java:50)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedMapperMethod$0(MybatisMapperProxy.java:101)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedMapperMethod(MybatisMapperProxy.java:100)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:95)
    at com.sun.proxy.$Proxy95.selectById(Unknown Source)
    at net.enniot.esk.datacore.dao.ConfigDaoTest.test(ConfigDaoTest.java:29)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

Comment From: miemieYaho

你配 MapperScan 了吧?

Comment From: yanggeorge

你配 MapperScan 了吧?

确实是配了。 MP的生成Dao的策略是什么? 通过什么把我写的ConfigDao接口与 ConfigMapper关联起来的呢?

因为我是多数据源的配置。但是我在Application的入口类上MapperScan的路径没有删除。

Comment From: miemieYaho

这是mybatis的注解出门右转百度策略

Comment From: yanggeorge

这是mybatis的注解出门右转百度策略

不是吧, MapperScan的目的是扫描找到具有Mapper注解的接口,然后生成Mapper bean。 但是我的 ConfigDao并没有Mapper注解。Mybatis会自动根据我的没有Mapper注解的ConfigDao接口生成bean么?