“Tipo de interfaz no se conoce a la MapperRegistry” excepción usando mybatis
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?
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
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 ??p>
adición de este bloque en el archivo build.gradle:
bootJar {
requiresUnpack '**/MyProblematic.jar'
}
solucionado mi problema