Исключение "интерфейс типа не известен 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">
работает