Type interface is not known to the MapperRegistry错误
发生在mybatis注解和配置文件一起用的时候
由于我命名接口的时候其中有一个接口的名字和接口所在的文件夹是一样的
这样映射class文件的时候无论怎么填路径,第二个映射的文件都会去找到那个同名文class上去
List<pirc> pirc = sqlsession.getMapper(Map.Map.class).selectBymuch();
for (Pirc pirc: pirc) {
System.out.println(pirc);
}
List<pirc> pirc = sqlsession.getMapper(Map.Map2.class).selectBymuch();
for (Pirc pirc: pirc) {
System.out.println(pirc);
}
更改前无论怎么改Map2都报红,而且是idea提示输入进去的都报红
更改后()
List<pirc> pirc = sqlsession.getMapper(Map.Map1.class).selectBymuch();
for (Pirc pirc: pirc) {
System.out.println(pirc);
}
List<pirc> pirc = sqlsession.getMapper(Map.Map2.class).selectBymuch();
for (Pirc pirc: pirc) {
System.out.println(pirc);
}
直到我改了一下那个接口的名字。。。
好家伙,我配置的那个第二个文件的一级目录居然跟着变了。我这才知道idea一致把我配置的一级目录当成了那个class文件。
解决
方法一:重命名避免冲突
方法二:不要整个包起别名。。
方法三:检查是否在配置文件引入映射文件
方法四:检查名称空间是否匹配,接口方法名是否和sql语句的id相同
方法五:配置文件配置引入配置文件(配置文件方案),引入实现类接口(注解方案),时必须用全路径名,一般配置文件放在工程目录直接文件名即可,接口一定要记得全路径。
方法六:使用配置文件方案时映射文件中的名称空间一定要全路径!注解无所谓,注解不用映射配置文件。但是混合使用也要记得改