アノテーションを使用してmybatisを設定していますが、この便利な例外が発生しています
org.Apache.ibatis.binding.BindingException:タイプインターフェイスorg.foo.BarはMapperRegistryに認識されていません
グーグルで 何も見つかりません。ユーザーガイドも見つかりません。何が足りないのですか?
OK、わかりました-これは、構成にXMLファイルを使用し、マッパー自体の注釈を使用していたために発生しています-XML構成を使用すると、mybatisはマッパーの注釈を検出しません。
これを参照してください フォローアップの質問 。
mybatisを初めて使用するためにここにたどり着いた人のためだけに http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html
設定ファイルマッパーセクション
<mappers>
<mapper class="my.package.com.MyClass"/>
</mappers>
これにより、config.xmlと注釈付きインターフェースを使用して実行できるようになります
Mapperクラスを次のようにSqlSessionFactory構成に追加します。
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(reader);
//very import
factory.getConfiguration().addMapper(BarMapper.class);
SqlSession sqlSession = factory.openSession();
Mapper.xmlファイルでは、マッパーの名前空間がマッパーインターフェイスへのパスである必要があります。
例えば:
<mapper namespace="com.mapper.LineMapper">
<select id="selectLine" resultType="com.jiaotong114.jiaotong.beans.Line">
select * from bus_line where id = #{id}
</select>
</mapper>
マッパーインターフェイスはcom.mapperパッケージに含まれている必要があり、その名前はLineMapperです。
タイプインターフェイスorg.domain.classmapperはMapperRegistryに認識されていません
完全なパッケージ/クラスがマッパーxml名前空間に入力されていない場合、MyBatisはこの例外をスローします。
例えば<mapper namespace="classmapper">
は例外を引き起こしますが、
<mapper namespace="org.domain.classmapper">
動作します
Mapper.xmlファイルが誤った名前空間を使用している可能性があります(おそらくコピーアンドペーストエラーが原因です)。
たとえば、shouldがmybatisにリンクされているMyEntityMapper.Java
と呼ばれるJavaインターフェイスがあるとします。 MyEntityMapper.xml
と呼ばれるマッパー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>
<mapper>
のMyEntityMapper.xml
要素のnamespace
属性は、実際にはnon.existent.package.NonExistentMapper
を指しているはずなのに、存在しないマッパーmy.mappers.MyEntityMapper
を指していることに注意してください。 。
SpringBootプロジェクト用のshadowJar/bootJarを作成し、org.springframework.bootgradleプラグインを使用しているときに私に起こりました
JarファイルがbootJar内で圧縮されると、myBatisはXML構成ファイルを見つけられず、説明されている例外をスローする可能性があります。
このブロックをbuild.gradleファイルに追加します。
bootJar {
requiresUnpack '**/MyProblematic.jar'
}
私の問題を解決しました