Исключение "интерфейс типа не известен MapperRegistry" с помощью mybatis

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

org.апаш.ibatis.обязательный.BindingException: Тип интерфейса орг.foo.Бар не известный в MapperRegistry

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

6 ответов


только для тех, кто оказался здесь, потому что они новые для mybatis http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html

в разделе картографы конфигурационных файлов

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

это заставит вас работать с конфигурацией.xml и аннотированные интерфейсы


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

посмотреть этот вопрос продолжения.


добавить маппер класса в конфигурацию SqlSessionFactory как это:

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

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

SqlSession sqlSession = factory.openSession();

в свой маппер.пространство имен 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.


может быть, это ваш картограф.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>

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


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

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

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

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