关于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文件混合在一个包下(习惯不好~~),如下图:
    混合
    在这种情况下你可能会发现你的代码以及文件格式完全没有问题但是怎么也无法让程序顺利地执行下去,这时候可以检查一下我们的target文件夹,查看一些必要的资源是否都已经成功导出:
    成功导出
    如果结果如上图所示(重要资源文件都已经成功导出,且位置信息正确无误),那么恭喜你可以进入下一步的检查工作。
    但如果你发现导出的结果并不如你所料那么大概率是资源导出的问题,这时候我们可以在maven的配置文件中进行build配置:(示例代码)
    <!--防止资源导出失败-->
    <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>
  • applicationContext.xml的配置问题
    在使用Spring进行mybatis的代理时,很重要的一步是将重要的库类注册到Spring仓库中,当然也包括对mapper信息的注册:
    <!--使用spring进行SqlSessionFactory的配置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"/>
        <!--进行mybatis的配置设置,事实上在spring中就可以完全代替原来的mybatis-config.xml配置文件-->
        <!--configLocation进行一个绑定操作,表明mybatis-config.xml中的配置信息也会使用-->
        <property name="configLocation" value="mybatis-config.xml"/>
        <!--mapperLocation即原来mybatis配置文件中的mapper映射-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

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

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

我们可以在临近出错的位置打上断点,接着找到对应的mapperRegister,也就是题目中错误信息的最终来源,来查看我们的配置信息是否已经成功注入:
一
二
在“knownMappers”下我们可以看到已经被成功识别的各个Mapper信息(图中表示为已成功识别的情况,如果没有成功,那么你所需要的Mapper信息是缺失的)

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

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

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这个问题通常是因为没有将 `UserMapper` 接口正确地注册到 `MapperRegistry` 中导致的。确保在使用 `UserMapper` 之前,你已经正确地配置了 `MapperScannerConfigurer` 或者手动将 `UserMapper` 注册到 `MapperRegistry` 中。 如果你使用的是 MyBatis 框架,可以按照以下步骤检查和解决问题: 1. 确保你的 `UserMapper` 接口正确地定义了 `@Mapper` 注解,这样 MyBatis 才能扫描到并生成相应的实现类。 ```java @Mapper public interface UserMapper { // ... } ``` 2. 确保你已经在配置文件中正确地配置了 `MapperScannerConfigurer`,指定了包扫描路径,并且该路径包含了 `UserMapper` 接口所在的包。 ```xml <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.hu.mapper"/> </bean> ``` 3. 如果你没有使用 `MapperScannerConfigurer`,而是手动注册 Mapper 接口到 `MapperRegistry` 中,请确保在注册之前已经实例化了 `UserMapper` 接口的实现类,并将其注册到 `MapperRegistry` 中。 ```java SqlSessionFactory sqlSessionFactory = ... // 初始化 SqlSessionFactory Configuration configuration = sqlSessionFactory.getConfiguration(); UserMapper userMapper = new UserMapperImpl(); // 假设 UserMapperImpl 是 UserMapper 的实现类 configuration.getMapperRegistry().addMapper(UserMapper.class); ``` 通过检查和修正上述步骤,你应该能够解决 `Type interface com.hu.mapper.UserMapper is not known to the MapperRegistry` 的问题。如果问题仍然存在,请提供更多的代码和配置信息,以便我能够更具体地帮助你解决问题
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值