«Интерфейс типа не известен своим исключением MapPerregistry», используя MyBatis

StackOverflow https://stackoverflow.com/questions/4263832

  •  27-09-2019
  •  | 
  •  

Вопрос

Я устанавливаю MyBatis, используя аннотации, и получить это полезное исключение

org.apache.ibatis.binding.bindingexception: тип интерфейса org.foo.bar не известен mapperregistry

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

Это было полезно?

Решение 3

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

Видеть это Следующий вопрос.

Другие советы

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

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

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

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

Добавить Mapper Класс к вашей конфигурации SQLSessionSactory, как это:

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

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

SqlSession sqlSession = factory.openSession();

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

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

Например, скажем, у вас есть интерфейс Java MyEntityMapper.java это должен быть связанным с MyBatis Mapper XML Config называется 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 указывает на какой-то несуществующий Mapper non.existent.package.NonExistentMapper, когда на самом деле это должно указывать на my.mappers.MyEntityMapper.

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

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

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

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

Случилось со мной при создании ShadowJar / Bootjar для проекта весной загрузки и используя плагин Rockle.

Когда банки застеклены внутри bootjar mybatis, могут не найти файлы конфигурации XML и выброс описанный исключение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top