Mybatis报错——Type interface com.mapper.EmployeeMapper is already known to the MapperRegistry.

9 篇文章 0 订阅
9 篇文章 0 订阅

Mybatis报错——Type interface com.mapper.EmployeeMapper is already known to the MapperRegistry.

先说我发生这个错误的原因吧:EmployeeMapper.xml映射文件被单独注册一次,批量注册的包中包含也EmployeeMapper.xml动态绑定的EmployeeMapper.java。也就是说EmployeeMapper接口(与EmployeeMapper.xml动态绑定的接口)被重复注册了两次。
如果你的问题解决了,那么恭喜,并不用看下去了。

报错如下

org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in com/mapper/EmployeeMapper.java (best guess)
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.binding.BindingException: Type interface com.mapper.EmployeeMapper is already known to the MapperRegistry.
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
.................
.................
    at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:118)
    ... 28 more

报错背景:
用mybatis框架获取数据库信息时发生的。

mybatis-config.xml文件中<mappers>节点下,既有<mapper />又有批量注册这两个子节点。代码如下:

    <mappers>
        <mapper resource="EmployeeMapper.xml" />
        <!-- 批量注册 :接口与映射文件要在同一个包下 -->
        <!-- 通过package元素将会把指定包下面的所有Mapper接口进行注册 -->
        <package name="com.mapper"/>
    </mappers>

再看我的项目,如图:
这里写图片描述
我的项目中EmployeeMapper.java文件存在于com.mapper包中,而EmployeeMapper.xml类动态绑定了EmployeeMapper.java,

EmployeeMapper.xml文件如图:

这里写图片描述

异常分析

以上配置就导致了,与EmployeeMapper.xml映射文件绑定的EmployeeMapper.java被注册了两次。

<!-- 第一次 -->
<mapper resource="EmployeeMapper.xml" />
<!-- 第二次:批量注册:该包下所有映射文件及绑定的接口都会被注册  -->
<package name="com.mapper"/>

尽管EmployeeMapper.xml映射文件不在该包下,但是与其绑定的EmployeeMapper类的源文件EmployeeMapper.java文件在该包下,在mybatis中的MapperRegistry就会认为EmployeeMapper被注册了两次。故而报错:EmployeeMapper is already known to the MapperRegistry.(EmployeeMapper已存在)。
如果EmployeeMapper.xml也在批量注册的包下,那也是一样的。
关键在于EmployeeMapper接口(与EmployeeMapper.xml动态绑定的接口)被重复注册了两次。

问题解决方案

检查是否有被重复注册的与映射文件动态绑定的接口

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值