Исключение «Тип интерфейса не известен MapperRegistry» с использованием mybatis - PullRequest
15 голосов
/ 24 ноября 2010

Я настраиваю mybatis с помощью аннотаций и получаю это полезное исключение

org.apache.ibatis.binding.BindingException: Тип интерфейса org.foo.Bar отсутствует известны MapperRegistry

Googling it не находит ничего, ни руководство пользователя. Чего мне не хватает?

Ответы [ 7 ]

21 голосов
/ 17 ноября 2012

только для тех, кто попал сюда, потому что они новички в 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 и аннотированными интерфейсами

7 голосов
/ 12 июля 2015

добавьте Mapper класс к вашей конфигурации SqlSessionFactory следующим образом:

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

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

SqlSession sqlSession = factory.openSession();
6 голосов
/ 24 ноября 2010

Хорошо, понял - это происходит потому, что я использовал XML-файл для конфигурации и аннотации для самих мапперов - и mybatis не находит аннотации мапперов при использовании XML-конфигурации.

См.этот дополнительный вопрос .

2 голосов
/ 23 марта 2017

В вашем файле 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.

1 голос
/ 24 апреля 2015

Тип интерфейса org.domain.classmapper не известен MapperRegistry

MyBatis выдает это исключение, если полный пакет / класс не введен в пространство имен mapper xml.

например. <mapper namespace="classmapper"> вызывает исключение, но

<mapper namespace="org.domain.classmapper"> работает

1 голос
/ 27 января 2015

Возможно, ваш файл mapper.xml использует неправильное пространство имен (возможно, из-за ошибки вставки копии).

Например, допустим, у вас есть интерфейс Java с именем MyEntityMapper.java, который должен быть связан с конфигурацией xml mybatis mapper с именем 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>

Обратите внимание, что атрибут namespace в элементе <mapper> в MyEntityMapper.xml указывает на некоторый несуществующий преобразователь non.existent.package.NonExistentMapper, тогда как на самом деле он должен указывать на my.mappers.MyEntityMapper.

0 голосов
/ 01 мая 2019

случилось со мной при создании shadowJar / bootJar для проекта весенней загрузки и используя подключаемый модуль org.springframework.boot

Когда файлы jar заархивированы внутри bootJar, myBatis может не найти файлы конфигурации XML и выдаст описанное исключение

добавление этого блока в файл build.gradle:

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

решил мою проблему

...