Dieser Artikel basierte zuvor auf der Rekonstruktion von SQLSessionFactoryBean. Daher werde ich kurz überprüfen, welche Operationen ich durchgeführt habe:
Erstellen Sie eine neue SQLSessionFactoryBean, und der anfängliche Code ist der gleiche wie MyBatis-Spring.
Refactor die buildSQLSessionFactory () -Methode, zahlreiche wenn Anweisungen in eine Reihe kleiner Methoden extrahieren, benutzerdefinierte Konfigurationsmethoden reservieren und gemeinsame Attribute Getter -Methoden hinzufügen.
Extrahieren Sie die Komponentenfabrik -Schnittstellen und bieten die Komponentenerstellung Toolklasse SQLSessionComponetFactorys, die zentral neue XXX () verwaltet, die an verschiedenen Stellen verstreut sind, um den Ersatz für den Komponenten zu erleichtern.
Schauen wir uns nun an, wie sie erweitert werden können. Erstellen Sie zunächst eine SchemasqlSessionFactoryBean, erben Sie die refaktorierte SQLSessionFactoryBean und synchronisieren Sie sie mit einer neu erstellten Klasse in der XML -Konfiguration:
öffentliche Klasse SchemasqlSessionFactoryBean erweitert SQLSessionFactoryBean {}Für einige einfache Funktionserweiterungen, z. B. das Festlegen des Standard -Ergebnistyps und das Scannen der angegebenen Abkürzungstyp -Abkürzung, werde ich hier nicht viel diskutieren. Hier werde ich mich darauf konzentrieren, wie ich erweitert werden kann, um die Konfiguration von SQLMapper mit XSD zu überprüfen.
1. Überschreiben Sie die Methode doparSeSQLMapperResource () in SQLSessionFactoryBean. Die Funktion dieser Methode besteht darin, eine SQLMapper -Konfigurationsdatei zu analysieren.
Natürlich müssen Sie für die Kompatibilität zuerst feststellen, ob es sich um DTD handelt. Wenn es sich um DTD handelt, analysieren Sie es gemäß der ursprünglichen Methode, ansonsten analysieren Sie es gemäß der benutzerdefinierten Methode:
Paket org.dysd.dao.mybatis.schema; import org.apache.ibatis.executor.ErrorContext; import org.apache.ibatis.session.configuration; import org.springframework.core.core.resource; org.springframework.util.xml.xmlvalidationModedEtector; öffentliche Klasse SchemasqlSessionFactoryBean erweitert SQLSessionFactoryBean {@OverrideProtected void doparSSQLMapperResource (Konfigurationskonfiguration, Ressourcen -MapperLocation) -Schudio -Throws Nestiode {Int Mody. detectValidationMode (mapperLocation); if (modus == xmlvalidationModedEtector.validation_dtd) {// Wenn es sich this.doparSeSQLMapperResourceWithSchema (Konfiguration, MapperLocation);} catch (Ausnahme E) {Neues NestioException werfen ("Die Mapping -Ressource nicht analysieren: '" + mapperLocation + "'", e); DoparSeSQLMapperResourceWithSchema (Konfigurationskonfiguration, Ressourcen -MapperLocation) {} private int detectValidationMode (Ressourcen -MapperLocation) löst nestiosexception {int modus = -1; try {xmlvalidationModedEctor detektor = new xmlvalidationModedEtector (); DETECTOR.DETECTVALIDATIONMODE (mapperLocation.getInputStream ());} catch (Ausnahme E) {Neues NestioException ("MAPPERLOCKSE -RESSEMAKTE: '" + MAPPERLOCATION + "'", E);Hier leihen wir uns den XMLValidationModedEtektor in Spring aus, um den Überprüfungsmodus von XML -Konfigurationsdateien zu erkennen. Es ist logisch einfach, lesen Sie einfach eine Zeile nach einem. Bevor der Text beginnt, werden Sie den DTD -Modus zurückgeben, wenn Sie feststellen, dass eine DTD -Definition vorliegt. Andernfalls geben Sie den XSD -Modus zurück (tatsächlich basiert nicht nur der Erkennungsmodus die Feder, sondern auch der benutzerdefinierte Namespace dahinter auch die Feder).
Zu diesem Zeitpunkt wurde die Analyse der SQLMapper -Konfigurationsdatei in zwei Zweige aufgeteilt, die mit der offiziellen Parsen von MyBatis kompatibel sind, und die Parsen im XSD -Modus wird zu der Methode doparsesqlmaperResourcewithschema () navigiert.
2. Schreiben Sie eine XSD -Datei zur Überprüfung von SQLMapper (erfordert ein gewisses Grundkenntnis von XSD. Informationen zum XML -Teil in diesem Blog finden Sie in den Studiennotizen).
1. Verwenden Sie zunächst ein XML -Tool, um die DTD -Datei von MyBatis in die ursprüngliche XSD -Datei umzuwandeln. Es gibt viele XML -Tools, die diese Funktion haben. Sie können online suchen.
Hier sind drei Ebenen:
(1) Root -Element (Mapper -Element): Entsprechend einer SQLMapper -Datei gibt es ein Namespace -Attribut, der eine logische Klassifizierung ihrer untergeordneten Elemente darstellt. Es ist zu beachten, dass sich das Namespace -Attribut hier vom XML -Namespace unterscheidet. Ersteres ist eine logische Klassifizierung von MyBatis selbst, und letzteres wird verwendet, um die XML -Elemente und -attributbeschränkungen zu definieren, die in XML -Dateien angezeigt werden können.
(2) Kinderelemente erster Ebene (Cache | cache-ref | resultMap | parametermap | Da das MyBatis-Framework von Kinderelementen auf erster Ebene eine unterschiedliche Verarbeitung aufweist, wird es als separates Niveau verwendet. Da es hauptsächlich hinzugefügt, löscht und ändert, um Anweisungen zu überprüfen, wird es ein Anweisungselement auf Anweisungsebene genannt.
(3) Andere Elemente (SQL-Konfigurationstext, inklusive | trimm | wobei | set | foreach | wählen | if): Text zum Konfigurieren von SQL-Skripten sowie dynamische Skriptelemente, die als Skript-Skriptelemente bezeichnet werden
2. Nehmen Sie die folgenden Änderungen an, die auf der Erzeugung von XSD -Dateien basieren
(1) Fügen Sie einen Namespace hinzu, z. B.:
<xml Version = "1.0" coding = "utf-8" standalone = "no"?> <xsd: Schema xmlns = "http://dysd.org/schema/sqlmapper" targetnamespace = "http://dysd.org/schema/sqlmapper" xmlns: xsd = "http://www.w3.org/2001/XMLSCHE" ElementDefault "ElementDefault" ElementDefault ". Version = "1.0">
(2) Verpacken Sie das Element der ersten Ebene in eine Element Group StatementGroup
(3) Ändern Sie das Mapper -Element, damit Elemente in anderen Namespaces angezeigt werden können
(4) Dynamische Skriptelemente in eine Elementgruppen -DynascriptGroup einwickeln und andere benannte Elemente erscheinen lassen
(5) Verwenden Sie die DynascriptGroup, um dort zu ersetzen, wo dynamische Skriptelemente angezeigt werden, wie z. B. <Select> Elemente
(6) Einige andere Optimierungen, wie das Definieren der drei Werteanweisungen, vorbereitet und aufrufbar, die von StatementType als Aufzählungstypen genommen werden können:
<xsd: SimpleType name = "AnweisungType"> <xsd: restriction base = "xsd: token"> <xsd: Enumeration Value = "Anweisung" /> <xsd: Enumeration Value = "vorbereitet" /> <xsd: Enumerationswert = "Callable" /> < /xsd: restriction> < /xsd: SimpleType> < /xsd: restriction> < /xsd: SimpleType> < /xsd: restriction> < /xsd: SimpleType> < /xSD:
Ähnliche umfassen Parametermode, JdbcType, Javatype usw.
Das obige ist die Zusammenfassung der von XSD verwendeten SQLMapper -Konfigurationsdatei zur Überprüfung von MyBatis. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!