20

我正在使用注释设置 mybatis,并得到这个有用的异常

org.apache.ibatis.binding.BindingException:类型接口 org.foo.Bar 不为 MapperRegistry 所知

谷歌搜索没有找到任何东西,也没有找到用户指南。我错过了什么?

4

7 回答 7

25

仅适用于因为对 mybatis 不熟悉而来到这里的任何人 http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html

在配置文件映射器部分

<mappers>
<mapper class="my.package.com.MyClass"/>
</mappers>

这将使您使用 config.xml 和带注释的接口启动并运行

于 2012-11-16T20:39:16.333 回答
9

Mapper类添加到您的 SqlSessionFactory 配置中,如下所示:

SqlSessionFactory factory = new SqlSessionFactoryBuilder()
            .build(reader);

//very import
factory.getConfiguration().addMapper(BarMapper.class);

SqlSession sqlSession = factory.openSession();
于 2015-07-12T07:40:50.323 回答
7

好的,明白了 - 发生这种情况是因为我使用 XML 文件进行配置,并为映射器本身使用注释 - 而 mybatis 在使用 XML 配置时找不到映射器注释。

请参阅此后续问题

于 2010-11-24T07:48:14.500 回答
3

在您的 mapper.xml 文件中,映射器的命名空间应该是映射器接口的路径。

例如:

<mapper namespace="com.mapper.LineMapper">
<select id="selectLine" resultType="com.jiaotong114.jiaotong.beans.Line">
select * from bus_line where id = #{id}
</select>
</mapper>

你的映射器接口应该在 com.mapper 包中,它的名称是 LineMapper。

于 2017-03-23T14:02:29.717 回答
1

可能是您的 mapper.xml 文件使用了不正确的命名空间(可能是因为复制粘贴错误)。

例如,假设您有一个名为的 Java 接口MyEntityMapper.java,它应该链接到一个名为的 mybatis 映射器 xml 配置MyEntityMapper.xml

MyEntityMapper.java

package my.mappers;

public interface MyEntityMapper {
    MyEntity getById(@Param("id") String id);
}

MyEntityMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="non.existent.package.NonExistentMapper">

    <resultMap id="MyEntityResultmap" type="MyEntity">
        <!-- some result map stuff here -->
    </resultMap>

    <select id="getByUuid" resultMap="MyEntityResultMap">
        <!-- some sql code here -->
    </select>
</mapper>

请注意,元素 innamespace上的属性指向某个不存在的 mapper ,而实际上它应该指向.<mapper>MyEntityMapper.xmlnon.existent.package.NonExistentMappermy.mappers.MyEntityMapper

于 2015-01-27T19:54:27.747 回答
1

MapperRegistry不知道类型接口org.domain.classmapper

如果未将完整的包/类输入映射器 xml 命名空间,MyBatis 会抛出此异常。

例如 <mapper namespace="classmapper">导致异常,但是

<mapper namespace="org.domain.classmapper">作品

于 2015-04-24T06:53:55.007 回答
0

在为 Spring Boot 项目创建 shadowJar/bootJar 并使用 org.springframework.boot gradle 插件时发生在我身上

当 jar 被压缩到 bootJar 中时,myBatis 可能无法找到 XML 配置文件,并会抛出所描述的异常

在 build.gradle 文件中添加这个块:

bootJar {
    requiresUnpack '**/MyProblematic.jar'
}

解决了我的问题

于 2019-05-01T10:10:10.773 回答