„Typ-Schnittstelle ist mit dem MapperRegistry nicht bekannt“ Ausnahme mit Mybatis

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

  •  27-09-2019
  •  | 
  •  

Frage

Ich gründe Mybatis mit Anmerkungen auf und bekommen diese hilfreiche Ausnahme

  

org.apache.ibatis.binding.BindingException:   Typ-Schnittstelle org.foo.Bar ist nicht   bekannt zum MapperRegistry

Googeln es nichts findet, noch die Bedienungsanleitung. Was bin ich?

War es hilfreich?

Lösung 3

OK, wurde es - dies geschieht, weil ich eine XML-Datei für die Konfiguration wurde mit und Anmerkungen für den Mapper selbst -. Und Mybatis nicht Mapper Annotationen finden, wenn eine XML-Konfigurations mit

Sehen Sie diese Followup Frage .

Andere Tipps

nur für alle, die hier gelandet, weil sie neu sind Mybatis http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html

in der Konfigurationsdatei Mapper Abschnitt

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

Diese haben Sie und läuft mit einer config.xml und kommentierten Schnittstellen

Add Mapper Klasse Ihren SqlSessionFactory Konfiguration wie folgt aus:

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

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

SqlSession sqlSession = factory.openSession();

In Ihrer mapper.xml Datei Mapper Namespace sollte der Pfad zu der Mapper-Schnittstelle sein.

Beispiel:

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

Ihre Mapper-Schnittstelle in com.mapper Paket sein sollte, und der Name ist LineMapper.

Es kann sein, dass Ihre mapper.xml Datei die falsche Namespace verwendet (vielleicht wegen einer Kopie Paste-Fehler).

Zum Beispiel, sagen wir, Sie eine Java-Schnittstelle namens MyEntityMapper.java dass sollte zu einem Mybatis Mapper XML-Konfigurations genannt MyEntityMapper.xml verknüpft werden:

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>

Beachten Sie, dass das namespace Attribut auf dem <mapper> Element in MyEntityMapper.xml zeigt auf einige inexistent Mapper non.existent.package.NonExistentMapper, wenn es wirklich sollte es my.mappers.MyEntityMapper zeigen werden.

Typ Schnittstelle org.domain.classmapper ist mit dem MapperRegistry nicht bekannt

Mybatis wirft diese Ausnahme, wenn die volle Paket / Klasse wird nicht in den Mapper XML-Namespace eingetragen.

z. <mapper namespace="classmapper"> verursacht Ausnahme, aber

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

ich geschah, als ein shadowJar / bootJar für ein Feder-Boot-Projekt zu erstellen und mit org.springframework.boot gradle Plugin

Wenn die Gläser werden in dem bootJar Mybatis Reißverschluss ausfallen können die XML-Konfigurationsdateien zu finden und die beschriebene Ausnahme

werfen

Hinzufügen dieser Block in der build.gradle-Datei:

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

mein Problem gelöst

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top