« Interface de type ne sait pas à l'MapperRegistry » exception en utilisant mybatis

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

  •  27-09-2019
  •  | 
  •  

Question

Je mybatis la mise en place des annotations à l'aide, et d'obtenir cette exception utile

  

org.apache.ibatis.binding.BindingException:   Type d'interface org.foo.Bar est pas   connu du MapperRegistry

googler ne trouve rien, ni le guide de l'utilisateur. Qu'est-ce que je manque?

Était-ce utile?

La solution 3

OK, il a obtenu - ce qui se passe parce que je travaillais avec un fichier XML pour la configuration, et les annotations pour les cartographes eux-mêmes -. Et mybatis ne trouve pas Mapper annotations lors de l'utilisation d'une configuration XML

Voir cette question suivi.

Autres conseils

juste pour tous ceux qui ont fini par ici parce qu'ils sont nouveaux pour mybatis http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html

dans la section cartographes de fichier de configuration

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

vous ont opérationnel avec une config.xml et des interfaces annotés

add Mapper classe à votre configuration SqlSessionFactory comme ceci:

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

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

SqlSession sqlSession = factory.openSession();

Dans l'espace de nom de votre fichier mapper.xml mappeur doit être le chemin à l'interface mappeur.

par exemple:

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

votre interface mappeur devrait être dans le paquet de com.mapper et le nom de celui-ci est LineMapper.

Il se peut que votre fichier mapper.xml utilise l'espace de nom incorrect (peut-être à cause d'une erreur de copier coller).

Par exemple, supposons que vous avez une interface Java appelée MyEntityMapper.java que devrait être lié à un appelé MyEntityMapper.xml config mybatis mappeur 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>

Notez que l'attribut namespace sur l'élément <mapper> dans MyEntityMapper.xml pointent vers un mappeur inexistante non.existent.package.NonExistentMapper, quand vraiment devrait pointer vers my.mappers.MyEntityMapper.

L'interface de type org.domain.classmapper est inconnu du MapperRegistry

mybatis jette cette exception si le package complet / classe n'est pas entré dans l'espace de noms XML Mapper.

par exemple. <mapper namespace="classmapper"> fait exception, mais

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

il me est arrivé lors de la création d'un shadowJar / bootJar pour un projet de démarrage de printemps et en utilisant org.springframework.boot plug-in gradle

Lorsque les bocaux sont compressés dans la mybatis bootJar peut manquer de trouver les fichiers de configuration XML et jetteront l'exception décrite

ajouter ce bloc dans le fichier build.gradle:

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

résolu mon problème

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top