Eccezione "Il tipo di interfaccia non è nota al MapperRegistry" utilizzando mybatis

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

  •  27-09-2019
  •  | 
  •  

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?

È stato utile?

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

follow domanda .

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top