“Tipo de interfaz no se conoce a la MapperRegistry” excepción usando mybatis

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

  •  27-09-2019
  •  | 
  •  

Pregunta

Soy la creación de MyBatis utilizando anotaciones, y conseguir esta excepción útiles

  

org.apache.ibatis.binding.BindingException:   Tipo de interfaz no es org.foo.Bar   conocido por el MapperRegistry

buscar en Google que no encuentra nada, ni la guía del usuario. ¿Qué me falta?

¿Fue útil?

Solución 3

Entendido - esto está sucediendo porque estaba usando un archivo XML para la configuración y anotaciones para los creadores de mapas a sí mismos -. Mybatis y no encuentra anotaciones asignador cuando se utiliza una configuración XML

seguimiento pregunta .

Otros consejos

simplemente para cualquier persona que terminamos aquí porque son nuevos en mybatis http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html

en la sección mapeadores archivo de configuración

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

Esto ha instalado y funcionando con una anotada config.xml y las interfaces

Añadir Mapper clase a su configuración SqlSessionFactory como esto:

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

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

SqlSession sqlSession = factory.openSession();

En el espacio de nombres de archivo mapper.xml asignador debe ser el camino a la interfaz asignador.

por ejemplo:

<mapper namespace="com.mapper.LineMapper">
<select id="selectLine" resultType="com.jiaotong114.jiaotong.beans.Line">
select * from bus_line where id = #{id}
</select>
</mapper>

interfaz de asignador debe estar en el paquete com.mapper y el nombre de la misma es LineMapper.

Puede ser que su archivo mapper.xml está utilizando el espacio de nombres incorrecta (tal vez debido a un error de copiar y pegar).

Por ejemplo, digamos que usted tiene una interfaz Java llamada MyEntityMapper.java que debe vincularse a un mybatis asignador XML de configuración llamado 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>

Tenga en cuenta que el atributo namespace en el elemento <mapper> en MyEntityMapper.xml se dirigen a alguna non.existent.package.NonExistentMapper asignador inexistente, cuando en realidad debería estar apuntando a my.mappers.MyEntityMapper.

Tipo de interfaz org.domain.classmapper no se conoce a la MapperRegistry

MyBatis lanza esta excepción si no se introduce el paquete / clase llena en el espacio de nombres XML Mapper.

por ejemplo. <mapper namespace="classmapper"> provoca una excepción, pero

<mapper namespace="org.domain.classmapper"> funciona

me pasó cuando la creación de un shadowJar / bootJar para un proyecto de arranque primavera y usando org.springframework.boot Gradle Plugin

Cuando los frascos están comprimidos dentro de la bootJar mybatis puede fallar para encontrar los archivos de configuración XML y tirarán la excepción descrita

adición de este bloque en el archivo build.gradle:

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

solucionado mi problema

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top