关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题

关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题

最近正在学习Mybatis-Spring的使用方法,今天第一次尝试直接使用Spring来整合mybatis配置(包括数据源设置,mapper映射等等)将sqlSessionFactory以及sqlSession全部交由Spring进行管理。在这个过程中遇到了如题所示的问题,参考了网络中的方法并且自己进行了一些探索,终于是解决了这个问题。

Type interface mapper.UserMapper is not known to the MapperRegistry

在说这个问题之前,我也强调一下在碰到这个问题之前可能遇到的一系列问题:

  • 资源导出的问题
    使用maven开发有着比较严格的打包方式,可能有小伙伴会和我一样配置文件与java文件混合在一个包下(习惯不好~~),如下图:
    关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题_第1张图片
    在这种情况下你可能会发现你的代码以及文件格式完全没有问题但是怎么也无法让程序顺利地执行下去,这时候可以检查一下我们的target文件夹,查看一些必要的资源是否都已经成功导出:
    关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题_第2张图片
    如果结果如上图所示(重要资源文件都已经成功导出,且位置信息正确无误),那么恭喜你可以进入下一步的检查工作。
    但如果你发现导出的结果并不如你所料那么大概率是资源导出的问题,这时候我们可以在maven的配置文件中进行build配置:(示例代码)
    
    <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>
  • applicationContext.xml的配置问题
    在使用Spring进行mybatis的代理时,很重要的一步是将重要的库类注册到Spring仓库中,当然也包括对mapper信息的注册:
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"/>
        
        
        <property name="configLocation" value="mybatis-config.xml"/>
        
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    bean>

当然对Spring的mybatis配置不熟悉的朋友,可以尝试在原来的mybatis-config.xml中使用mapper标签进行配置,对比试验:如果发现错误消除,那么很有可能是配置填写的错误,可以反过头来再仔细查看。

我这里还提供一个小方法用以确认资源导入是否正确,这也是最直观最便捷的方式:通过debug来确定,一下是简介

我们可以在临近出错的位置打上断点,接着找到对应的mapperRegister,也就是题目中错误信息的最终来源,来查看我们的配置信息是否已经成功注入:
关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题_第3张图片
关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题_第4张图片
在“knownMappers”下我们可以看到已经被成功识别的各个Mapper信息(图中表示为已成功识别的情况,如果没有成功,那么你所需要的Mapper信息是缺失的)

  • 路径以及格式问题(最坑爹的~~~~)
    其实不单是mybatis,很多的配置类文件都对格式有着严格的要求,如果不仔细观察,它很有可能站在你面前你都不知道它就是罪魁祸首,相信很多人和我一样,碰到过“.”与“/”的疑惑,惭愧的是我依然很难分清楚两者的主要使用场景。
    在***mapper.xml文件中,有一个必不可少的信息是“namespace”(可能很多同学就是忘了namespace)
    关于Type interface mapper.UserMapper is not known to the MapperRegistry.问题_第5张图片
    除了它存在的必要性以外,还有重要的一点是它的格式,首先需要注意的是必须指明其文件路径(如图中如果直接写UserMapper则会出现题目中的错误信息),除此以外还有必须注意其需要使用“.”格式来指明接口。

以上则为本人对题目中问题的小结。本人是新手一枚,如果有错误希望大家可以提出来,感谢!!

你可能感兴趣的:(mybatis,spring)