«Интерфейс типа не известен своим исключением MapPerregistry», используя MyBatis
Вопрос
Я устанавливаю 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'
}
решил мою проблему