我正在使用注释设置 mybatis,并得到这个有用的异常
org.apache.ibatis.binding.BindingException:类型接口 org.foo.Bar 不为 MapperRegistry 所知
谷歌搜索没有找到任何东西,也没有找到用户指南。我错过了什么?
仅适用于因为对 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 和带注释的接口启动并运行
将Mapper类添加到您的 SqlSessionFactory 配置中,如下所示:
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(reader);
//very import
factory.getConfiguration().addMapper(BarMapper.class);
SqlSession sqlSession = factory.openSession();
好的,明白了 - 发生这种情况是因为我使用 XML 文件进行配置,并为映射器本身使用注释 - 而 mybatis 在使用 XML 配置时找不到映射器注释。
请参阅此后续问题。
在您的 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。
可能是您的 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.xml
non.existent.package.NonExistentMapper
my.mappers.MyEntityMapper
MapperRegistry不知道类型接口org.domain.classmapper
如果未将完整的包/类输入映射器 xml 命名空间,MyBatis 会抛出此异常。
例如
<mapper namespace="classmapper">
导致异常,但是
<mapper namespace="org.domain.classmapper">
作品
在为 Spring Boot 项目创建 shadowJar/bootJar 并使用 org.springframework.boot gradle 插件时发生在我身上
当 jar 被压缩到 bootJar 中时,myBatis 可能无法找到 XML 配置文件,并会抛出所描述的异常
在 build.gradle 文件中添加这个块:
bootJar {
requiresUnpack '**/MyProblematic.jar'
}
解决了我的问题