"نوع الواجهة غير معروف لدى MapPerregistry" باستخدام MyBatis

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

  •  27-09-2019
  •  | 
  •  

سؤال

أقوم بإعداد MyBatis باستخدام التعليقات التوضيحية ، وأحصل على هذا الاستثناء المفيد

org.apache.ibatis.binding.bindingException: اكتب واجهة org.foo.bar غير معروف لدى MapPerregistry

غوغلينغ لا يجد أي شيء ، ولا دليل المستخدم. ماذا ينقصني؟

هل كانت مفيدة؟

المحلول 3

حسنًا ، حصلت عليه - هذا يحدث لأنني كنت أستخدم ملف XML للتكوين ، والتعليقات التوضيحية للمحزمات نفسها - ولا يجد MyBatis تعليقات Mapper عند استخدام تكوين XML.

انظر الى هذا سؤال المتابعة.

نصائح أخرى

فقط لأي شخص انتهى به الأمر إلى هنا لأنهم جدد في MyBatishttp://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 ، يجب أن يكون المسار إلى واجهة Mapper.

فمثلا:

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

يجب أن تكون واجهة Mapper الخاصة بك في حزمة com.mapper واسمها هو linemapper.

قد يكون ملف mapper.xml الخاص بك يستخدم مساحة الاسم غير الصحيحة (ربما بسبب خطأ معجون النسخ).

على سبيل المثال ، لنفترض أن لديك واجهة Java تسمى MyEntityMapper.java الذي - التي ينبغي ترتبط بتكوين MyBatis Mapper XML المسمى 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>

لاحظ أن namespace ميزة على <mapper> عنصر في MyEntityMapper.xml يشير إلى بعض الخريطة غير الموجودة non.existent.package.NonExistentMapper, ، عندما يكون من الممكن الإشارة إليه حقًا my.mappers.MyEntityMapper.

اكتب واجهة org.domain.classmapper غير معروف في MapPerregistry

يلقي MyBatis هذا الاستثناء إذا لم يتم إدخال الحزمة / الفئة الكاملة في مساحة اسم Mapper XML.

على سبيل المثال<mapper namespace="classmapper"> يسبب استثناء ، ولكن

<mapper namespace="org.domain.classmapper"> يعمل

حدث لي عند إنشاء Shadowjar/Bootjar لمشروع Boot Spring واستخدام org.springframework.boot gradel

عندما يتم ضرب الجرار داخل bootjar mybatis قد تفشل في العثور على ملفات تكوين XML وسوف ترمي الاستثناء الموصوف

إضافة هذه الكتلة في ملف build.gradle:

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

حل مشكلتي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top