„Typ-Schnittstelle ist mit dem MapperRegistry nicht bekannt“ Ausnahme mit Mybatis
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?
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
werfenHinzufügen dieser Block in der build.gradle-Datei:
bootJar {
requiresUnpack '**/MyProblematic.jar'
}
mein Problem gelöst