问题描述:
在使用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,来防止我们资源导出失败的问题-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

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

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

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐