当前使用版本(必填,否则不予处理)
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么?