Eccezione "Il tipo di interfaccia non è nota al MapperRegistry" utilizzando mybatis
Domanda
Sto configurando mybatis utilizzando le annotazioni e ricevo questa utile eccezione
org.apache.ibatis.binding.BindingException:Digitare l'interfaccia org.foo.Bar non è noto al MapperRegistry
Cercandolo su Google non trova nulla, nemmeno la guida per l'utente.Cosa mi manca?
Soluzione 3
OK, capito - questo sta accadendo perché ero utilizzando un file XML per la configurazione, e le annotazioni per i mapper stessi -. E mybatis non trova annotazioni mapper quando si utilizza una configurazione XML
Altri suggerimenti
solo per chi finiti qui perché sono una novità per mybatis
http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html
nella sezione mapper file di configurazione
<mappers>
<mapper class="my.package.com.MyClass"/>
</mappers>
questo vi hanno installato e funzionante con un config.xml e annotato le interfacce
Aggiungi Mapper di classe alla vostra configurazione SqlSessionFactory come questo:
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(reader);
//very import
factory.getConfiguration().addMapper(BarMapper.class);
SqlSession sqlSession = factory.openSession();
In namespace tuo mapper.xml fascicolo di mapper dovrebbe essere il percorso per l'interfaccia mapper.
Ad esempio:
<mapper namespace="com.mapper.LineMapper">
<select id="selectLine" resultType="com.jiaotong114.jiaotong.beans.Line">
select * from bus_line where id = #{id}
</select>
</mapper>
l'interfaccia mapper dovrebbe essere nel pacchetto com.mapper e il nome è LineMapper.
E 'possibile che il file mapper.xml utilizza lo spazio dei nomi non corretta (forse a causa di un errore di copia incolla).
Per esempio, diciamo che si dispone di un'interfaccia Java chiamato MyEntityMapper.java
che dovrebbe essere collegato ad un mybatis mapper XML di configurazione chiamato 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>
Si noti che l'attributo namespace
sull'elemento <mapper>
in MyEntityMapper.xml
sta puntando a qualche non.existent.package.NonExistentMapper
mapper inesistente, quando in realtà si dovrebbe puntare my.mappers.MyEntityMapper
.
interfaccia di tipo org.domain.classmapper non è noto al MapperRegistry
MyBatis genera questa eccezione se il pacchetto completo / classe non è entrato nel namespace XML mapper.
es.
<mapper namespace="classmapper">
provoca eccezione, ma
<mapper namespace="org.domain.classmapper">
funziona
Mi è successo durante la creazione di uno shadowJar / bootJar per un progetto di avvio primaverile e Utilizzo del plug-in Gradle org.springframework.boot
Quando i jar vengono compressi all'interno di bootJar myBatis potrebbe non riuscire a trovare i file di configurazione XML e genererà l'eccezione descritta
aggiungendo questo blocco nel file build.gradle:
bootJar {
requiresUnpack '**/MyProblematic.jar'
}
risolto il mio problema