使用mybatis“MapperRegistry不知道类型接口”异常

时间:2010-11-24 05:48:35

标签: java ibatis mybatis

我正在使用注释设置mybatis,并获得此有用的异常

  

org.apache.ibatis.binding.BindingException:   键入接口org.foo.Bar不是   已知MapperRegistry

Googling it找不到任何内容,也没有找到用户指南。我错过了什么?

7 个答案:

答案 0 :(得分:21)

只是因为他们是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和带注释的接口

答案 1 :(得分:7)

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

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

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

SqlSession sqlSession = factory.openSession();

答案 2 :(得分:6)

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

请参阅此followup question

答案 3 :(得分:2)

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

例如:

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

你的mapper接口应该在com.mapper包中,它的名字是LineMapper。

答案 4 :(得分:1)

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

例如,假设您有一个名为MyEntityMapper.java的Java接口,链接到名为MyEntityMapper.xml的mybatis映射器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>

请注意namespace<mapper>元素上的MyEntityMapper.xml属性指向一些不存在的映射器non.existent.package.NonExistentMapper,当它确实指向{{1}时}}

答案 5 :(得分:1)

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

如果没有将完整的包/类输入mapper xml命名空间,MyBatis会抛出此异常。

e.g。 <mapper namespace="classmapper">导致异常,但

<mapper namespace="org.domain.classmapper">有效

答案 6 :(得分:0)

在为spring boot项目创建shadowJar / bootJar时发生 使用org.springframework.boot gradle插件

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

将此块添加到build.gradle文件中:

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

解决了我的问题