org.apache.ibatis.binding.BindingException: Type interface xxx is not known to the MapperRegistry.

问题描述:
在使用mybatis的过程中,出现了如下错误提示

org.apache.ibatis.binding.BindingException: Type interface com.cheng.dao.UserDao is not known to the MapperRegistry.

翻译:MapperRegistry不知道类型接口com.cheng.dao.UserDao。

排错:
1、先查看mapper接口和mapper.xml是否在同一个包下,如果在同一个包下,需确保名字一样(不包括后缀)

2、查看mapper.xml的命名空间(namespace)是否与mapper接口所在的包名一致,如果不一致,需要修改

3、检查接口方法名,是否与xml文件中的SQL语句的id值一致,如果不一致,需要修改

4、编译后,查看接口所在目录下是否有对应的xml文件(前提是使用maven创建项目),如果没有,需要在pom.xml文件中做如下配置


<build>
    <resources>
        <resource>
            <directory>src/main/resourcesdirectory>
            <includes>
                <include>**/*.propertiesinclude>
                <include>**/*.xmlinclude>
            includes>
            <filtering>falsefiltering>
        resource>
        <resource>
            <directory>src/main/javadirectory>
            <includes>
                <include>**/*.propertiesinclude>
                <include>**/*.xmlinclude>
            includes>
            <filtering>falsefiltering>
        resource>
    resources>
build>

注:
如果是第4个原因,需要注意一些问题

  1. 有的filtering设置是为true,但如果有中文注释,有可能会出现乱码问题(非绝对),如果出现,只需将其改为false即可
  2. 如果在一个项目中,存在多个Module,那在项目的最外层pom.xml中配置resources有时不会生效,需要在具体Module的pom.xml中再配置一次

忍不住吐槽一句:
这次实在是被这个错误坑得欲仙欲死,所有的xml配置文件都检查了数遍,几乎是一条一条的排查,都没有发现问题,甚至都将整个Module删除重写了两遍,都没能发现错误,只因在项目创建时就在pom.xml中配置过resources。
直到……忽然想起在哪听过,这玩意儿在最外层pom.xml中有可能不生效,就顺手拷贝到Module中,于是问题就——这——么——被——解——决——了?
就问你气不气!!!

你可能感兴趣的:(IDEA实际问题及解决方案,maven,mybatis,java,xml)