2012-04-03 13 views
1

Ich möchte Schnittstelle statt Mapper XML-Datei in MyBatis verwenden. In der MyBatis-Konfigurationsdatei definiere ich den Mapper <mapper class="aa.B" />, wobei B Methoden enthält, die mit MyBatis-Annotationen versehen sind. Wenn ich versuche, eine Mapper-Instanz zu erstellen session.getMapper(B.class); ich einen Fehler:MyBatis-Konfiguration

org.xml.sax.SAXParseException: Attribute "class" must be declared for element type "mapper".

Wie kann ich Schnittstellen hier SQL-Anweisungen zur Karte verwenden?

Antwort

1

Sie können nicht Mapper-Schnittstelle über die sqlconfig XML-Datei hinzufügen, haben Sie die Java API xml

Configuration.addMapper(B.class) 

Der Knoten in sqlconfig zu verwenden ist für definding sqlmap XMLs, nicht Mapper Schnittstellen. Oder Sie könnten mybatis-spring verwenden, das die automatische Zuordnung aller Mapper in einem Paket zur Konfiguration von sqlsessionfactory unterstützt.

+0

Dann, was ist Der Zweck von '' in http://www.mybatis.org/core/configuration.html#mappers? –

+0

@Johnny, kann etwas sein, das sie in einer späteren Version hinzugefügt haben. Meine Antwort war am 3. April, während die Seite, die Sie verlinken, zuletzt am 19. April aktualisiert wurde. –

1

Die Ausnahme ist aufgetreten, wenn das Attribut 'class' im Element 'mapper' in der DTD nicht vorhanden ist.

Zum Beispiel in Mybatis 3.0.1, 'Mapper' nicht die 'Klasse' Attribut in DTD wie folgt aus:

<!ATTLIST mapper 
resource CDATA #IMPLIED 
url CDATA #IMPLIED 
> 

Sie benötigen Mybatis Bibliothek spätestens ein wie 3.1 zu aktualisieren. 1.

In der Version, ist das Attribut Definition des Begriffs 'Mapper' wie folgt:

<!ATTLIST mapper 
resource CDATA #IMPLIED 
url CDATA #IMPLIED 
class CDATA #IMPLIED 
> 

Sie können Ihre DTD-Datei in den folgenden Pfad in Ihrer Mybatis Bibliothek finden:

org/apache/ibatis/builder/xml/mybatis-3-config.dtd