2010-11-24 8 views
12

मैं टिप्पणियों का उपयोग करने mybatis सेट कर रहा हूं, और हो रही यह सहायक अपवाद का उपयोग कर अपवादmybatis

org.apache.ibatis.binding.BindingException "प्रकार इंटरफ़ेस MapperRegistry को ज्ञात नहीं है" .foo.Bar MapperRegistry

Googling it के लिए नहीं में जाना जाता है कुछ भी, और न ही उपयोगकर्ता गाइड नहीं मिल रहा है। मैं क्या खो रहा हूँ?

+2

मुझे Google से प्यार है। यह पूछने के 5 मिनट बाद, Google लिंक मैंने केवल इस प्रश्न पर अंक पोस्ट किए। – ripper234

उत्तर

5

ठीक है, समझ गया - ऐसा इसलिए हो रहा है क्योंकि मैं कॉन्फ़िगरेशन के लिए एक एक्सएमएल फ़ाइल का उपयोग कर रहा था, और मैपर्स के लिए एनोटेशन स्वयं - और माइक्रेटिस को एक्सएमएल कॉन्फ़िगरेशन का उपयोग करते समय मैपर एनोटेशन नहीं मिला है।

यह followup question देखें।

18

बस किसी के लिए भी जो यहाँ समाप्त हो गया, क्योंकि वे कॉन्फ़िग फ़ाइल मानचित्रकारों अनुभाग

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

में http://www.mybatis.org/core/configuration.html
http://www.mybatis.org/mybatis-3/configuration.html

mybatis के लिए नए हैं यह आप होगा ऊपर और साथ चल रहे एक config.xml और एनोटेटेड इंटरफेस

+0

धन्यवाद! यह सहायक है। –

+0

पुष्टि की, यह काम करता है। धन्यवाद! –

+0

यूआरएल अब मान्य नहीं है। – Basil

1

यह हो सकता है कि आपकी mapper.xml फ़ाइल usi है गलत नामस्थान (शायद एक कॉपी पेस्ट त्रुटि के कारण)।

MyEntityMapper.java

package my.mappers; 

public interface MyEntityMapper { 
    MyEntity getById(@Param("id") String id); 
} 

MyEntityMapper:

उदाहरण के लिए, मान लीजिए कि आप एक जावा इंटरफ़ेस MyEntityMapper.java कहा जाता है कि एक mybatis नक्शाकार एक्सएमएल MyEntityMapper.xml बुलाया config से जोड़ा जाना चाहिए डालते हैं। 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 पर MyEntityMapper.xml में तत्व कुछ गैर मौजूद नक्शा non.existent.package.NonExistentMapper पर इंगित कर रहा है, जब वास्तव में यह my.mappers.MyEntityMapper पर इंगित करना चाहिए।

1

प्रकार इंटरफ़ेस org.domain.classmapper MapperRegistry

MyBatis को ज्ञात नहीं है यह अपवाद है, तो पूरा पैकेज/वर्ग नक्शाकार एक्सएमएल नाम स्थान में प्रवेश नहीं कर रहा है फेंकता है।

उदा। <mapper namespace="classmapper"> अपवाद का कारण बनता है, लेकिन

<mapper namespace="org.domain.classmapper"> काम करता है

+1

धन्यवाद! यह मेरे लिए काम किया! –

3

अपने SqlSessionFactory विन्यास को मैपर जोड़ने वर्ग इस रूप में:

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

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

SqlSession sqlSession = factory.openSession(); 
2

अपने 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 है।

संबंधित मुद्दे