Einführung in MyBatis
MyBatis ist ein hervorragendes Rahmen für Persistenzschicht, das einfache SQL -Abfragen, gespeicherte Verfahren und erweiterte Zuordnung unterstützt. MyBatis eliminiert manuelle Einstellungen fast aller JDBC -Code und -Parameter sowie die Suche in der Ergebnisse des Ergebnissatzes. MyBatis kann einfache XML oder Anmerkungen zur Konfiguration und ursprüngliche Zuordnung, Mapping -Schnittstellen und Javas Pojos (einfache alte Java -Objekte) in Datenbank in der Datenbank verwenden.
Die funktionale Architektur von MyBatis ist in drei Ebenen unterteilt (das Bild wird von Baidu Encyclopedia entlehnt):
1) API -Schnittstellenschicht: Bietet Schnittstellen -APIs für die externe Verwendung, durch die Entwickler Datenbanken manipulieren. Sobald die Schnittstellenschicht die Anrufanforderung empfängt, wird die Datenverarbeitungsebene aufgerufen, um die spezifische Datenverarbeitung abzuschließen.
2) Datenverarbeitungsschicht: Verantwortlich für die spezifische SQL -Suche, SQL -Parsen, SQL -Ausführung und Ausführungsergebniszuordnung usw. Der Hauptzweck ist es, einen Datenbankvorgang basierend auf der Anforderung des Anrufs abzuschließen.
3) Grundlegende Support -Ebene: Verantwortlich für die grundlegendste funktionale Unterstützung, einschließlich Verbindungsmanagement, Transaktionsmanagement, Konfigurationsbelastung und Cache -Verarbeitung. Dies sind alles gemeinsame Dinge, die sie als die grundlegendsten Komponenten extrahieren. Bietet die grundlegendste Unterstützung für die obere Schicht der Datenverarbeitungsschicht.
Wenn Sie die Zuordnung in myBatis auswählen, kann der Rückgabetyp mit Ergebnistyp oder resultMap verwendet werden. Der Ergebnistyp repräsentiert direkt den Rückgabetyp, während Ergebnismap eine Referenz auf den externen Ergebnismap ist, aber das Ergebnistyp und das Ergebnismap können nicht gleichzeitig vorhanden sein. Wenn MyBatis die Zuordnung abfragt, wird jede Attributabfrage in einer entsprechenden Karte platziert, wobei der Schlüssel der Attributname und der Wert sein entsprechender Wert ist. Wenn das angegebene Rückgabe -Attribut des Retyps ist, enthält MyBatis die Schlüsselwertpaare in der Karte und weisen die entsprechenden Attribute des vom Ergebnistyps angegebenen Objekts zu. Tatsächlich ist der Rückgabetyp jeder Abfragekarte von MyBatis ein Ergebnismap. Wenn das von uns bereitgestellte Rückgabe -Attribut jedoch das Ergebnistyp ist, weist MyBatis automatisch den entsprechenden Wert den Attributen des vom Ergebnistyps angegebenen Objekts zu. Wenn der von uns bereitgestellte Rückgabetyp resultMap ist, da die Karte das Domänenmodell nicht gut darstellen kann, müssen wir es weiter in das entsprechende Objekt selbst umwandeln, was in komplexen Abfragen oft sehr nützlich ist.
Es gibt eine solche Blog.java -Datei
Java.util.List; öffentliche Klasse Blog {private int id; privater String -Titel; privater String -Inhalt; private String -Eigentümer; private Liste <Kommentar> Kommentare; public int getId () {return id;} public void setid (int id) {this.id = id;} public String GetTitle () {return;} public void settite (String) {this.tit -title {this.tit -title (this. Content;} public void setContent (String -Inhalt) {this.content = content;} public String getowner () {return owner;} public void setowner (String -Eigentümer) {this.unterner = Eigentümer;} publiclist publiclist <Comments <comments> {) {return Kommentare;} öffentliche void -setComments (liste {comments {comments) {This. "-------------------- 博客 ------------------/N ID:" + id + "/n Titel:" + title + "/n Inhalt:" + Inhalt + "/n Eigentümer:" + Eigentümer;}}Die entsprechende Datenbanktabelle enthält ID-, Titel-, Inhalts- und Eigentümerattribute. Wenn wir die folgende Abfrageberechnung durchführen
<typeAlias alias="Blog" type="com.tiantian.mybatis.model.Blog"/><!--Configuration file from MyBatis mybatis_config.xml--><select id="selectBlog" parameterType="int" resultType="Blog">select * from t_blog where id = #{id}</select><!--From SQL mapping file BlogMapper.xml->MyBatis erstellt automatisch ein Ergebnismap -Objekt und verkapuliert dann das Schlüsselwertpaar basierend auf dem gefundenen Attributnamen. Anschließend sehen Sie, dass der Rückgabetyp ein Blog -Objekt ist, und dann das dem Blog -Objekt entsprechende wichtige Wertpaar aus dem Ergebnismap herausnehmen und es zuweisen.
Es ist auch sehr nützlich, wenn der Rückgabetyp direkt ein Ergebnismap ist, der hauptsächlich für komplexe gemeinsame Abfragen verwendet wird, da es nicht erforderlich ist, einfache Abfragen durchzuführen. Schauen wir uns zunächst eine einfache Abfrage mit einem Retyp -Ergebnis -Ergebnis an und dann die Verwendung komplexer Abfragen.
Wie man eine einfache Frage schreibt
<resultMap type = "blog" id = "blogresult"> <id column = "id" property = "id"/> <resultal column = "title" property = "title"/> <resultal columne Eigenschaft = "Eigentümer"/> <</resultmap> <select id = "selectBlog" parameterType = "int" resultMap = "bloGresult"> SELECT * Von T_BLOG WHERE ID = #{ID} </select>Der Wert von resultmap in der ausgewählten Karte ist die ID eines externen Ergebnismaps, der angibt, auf welches Ergebnis es zugeordnet ist. Das Typattribut des externen Ergebnismaps gibt an, welches Typ das Ergebnis des Ergebnismaps ist. Hier ist der Blog -Typ, daher wird MyBatis ihn als Blog -Objekt herausnehmen. Die untergeordnete Knoten -ID des Ergebnismap -Knotens wird verwendet, um die ID des Objekts zu identifizieren, während der Ergebnis unter dem untergeordneten Knoten verwendet wird, um einige einfache Eigenschaften zu identifizieren. Die Spalteneigenschaft repräsentiert die aus der Datenbank abgebrachten Attribute, und die Eigenschaft repräsentiert, welche Eigenschaft der entsprechende Wert der abfragten Eigenschaft dem Entitätsobjekt zugewiesen wird. Auf diese Weise schreiben Sie resultMap für einfache Abfrage. Schauen wir uns als nächstes eine kompliziertere Frage an.
Es gibt eine Kommentatorklasse, die eine Blog -Referenz hat, die angibt, für welchen Blog es sich handelt. Beim Abfragen von Kommentaren müssen wir auch das entsprechende Blog herausfinden und es seinem Blog -Attribut zuweisen.
import java.util.Date;public class Comment {private int id;private String content;private Date commentDate = new Date();public Blog blog;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Date getCommentDate() {return commentDate;} public void setCompmentDate (Datum Kommentar) {this.commentDate = commentDate;} public blog getBlog () {return blog;} public void setBlog (Blog blog) {this.blog = blog;} öffentlicher String toString () {return blog + "-/n------ "/n commentDate:" + commentDate;}}Es ist so geschrieben
<!-aus commentMapper.xml Datei-> <resultmap type = "comment" id = "commentResult"> <assoziationseigenschaften #{id} </select> <select id = "selectBlog" parameterType = "int" resultType = "blog"> select * Aus t_Compment wobei id = #{id} </select> <select id = "selectBlog" parameterType = "int" resultTYPe = "Blog"> select * aus t_blog wobDie Zugangssituation ist so. Erstens anfordern Sie die SELECT -Karte mit der ID von SelectCompment und erhalten dann ein Ergebnismap -Objekt mit der ID von commentResult. Wir können sehen, dass der Rückgabetyp des entsprechenden Ergebnismaps ein Kommentarobjekt ist, der nur einen Assoziationsknoten hat, und es gibt keine ID- und Ergebnis -untergeordnete Kinderknoten, die der oben genannten einfachen Abfrage entspricht, aber dem Kommentarobjekt wird die entsprechende ID und andere Attribute weiterhin zugewiesen. Das hat MyB früher erwähnt. ATIS hat eine automatische Kapselungsfunktion. Solange Sie einen Rückgabetyp angeben, verwendet MyBatis die Abfrageergebnisse, um das entsprechende Objekt gemäß seinem eigenen Urteil zu verkapulieren. Wenn Sie in der obigen einfachen Abfrage nicht klar angeben, welches Feld der ID entspricht und welches Feld dem Titel im Ergebnismap entspricht, wird MyBatis es auch nach seinem eigenen Urteil verkapulieren. MyBatis 'eigenes Urteil ist es, das Feld der Abfrage oder ihren entsprechenden Alias mit den Attributen des Rückkehrobjekts zu vergleichen. Wenn es übereinstimmt und auch der Typ übereinstimmt, wird es MyBatis es zuweisen. Ein Blog -Attribut ist in der entsprechenden Ergebnismap zugeordnet, und sein entsprechender Java -Typ ist Blog. In der obigen Schreibmethode wird das zugeordnete Objekt durch Unterabfragen zugeordnet und kann natürlich auch direkt durch die Assoziationsabfrage zugeordnet werden. Im obigen Association Child Node gibt das Eigenschaftsattribut an, welche zugehörige Eigenschaft der RetMAP -Rückgabetyp ist. Für das obige Beispiel wird das Blog -Attribut mit einem Kommentar verwaltet. SELECT Zeigt an, welche Auswahlkarte das entsprechende zugeordnete Attribut ausgewählt hat, dh eine ausgewählte Karte mit dem Wert, der dem zugeordneten Attributobjekt entspricht, entspricht. Die Spalte gibt das Schlüsselwertpaar an, das dem Ergebnismap mit ID commentResult entspricht. Dieses Schlüsselwertpaar wird als Parameter für die Unterabfrage des zugehörigen Objekts verwendet, dh der Wert der Blog-Attribut-Abfrage in SelectCompment wird als Parameter an die Unterabfrage des zugehörigen Objektblogs zur Unterabfrage des zugehörigen Objektblogs übergeben. Der Javatyp gibt an, in welcher Art des aktuellen zugeordneten Objekts Java befindet.
In der obigen Einführung von Eins-zu-Eins- oder Eins-zu-Viele-Verhältnissen zur Ein-Parteien im Fall von Eins-zu-Viele wird eine Anfrage eingeführt. In den tatsächlichen Anwendungen gibt es eine andere Anwendung, die häufiger verwendet. Es ist notwendig, die entsprechenden mehr Parteien durch eine Partei herauszufinden. Wenn Sie die weiteren Parteien herausnehmen, muss eine Partei auch mit einer Partei in Verbindung gebracht werden. Das heißt im obigen Beispiel, wenn das Blog -Objekt herausgenommen wird, werden alle entsprechenden Kommentare herausgenommen. Wenn Sie den Kommentar herausnehmen, muss er den entsprechenden Blog noch herausnehmen. Dies wird durch eine Anfrage in Java herausgenommen. Die Schreibmethode lautet wie folgt:
<!-aus BlogMapper.xml-Datei-> <resultmap type = "blog" id = "blogresult"> <id column = "id" Property = "id"/> <collection Properation = "Kommentare" select = "selectComentsBOGBlog" column = "id" id "vontype =" comment "> </collection> </resultMapMap> <resultmap type" id "id" commentresult> javatype = "blog" column = "blog" "select =" selectBlog "/> </resultMap> <select id =" selectBlog "parameterType =" int "resultMap =" bloGresult "> select * aus t_blog wob resultMap = "commentResult"> SELECT * Aus t_Comment, wobei blog = #{blogid} </select>Der Eintrag der oben genannten Anforderung ist eine Auswahlkarte mit ID -SelectBlog, und das Rückgabeergebnis ist ein Ergebnismap mit ID Blockesult. Die Art der ID blogresult ist Blog, die die Attribute und Felder der ID angibt. Das Angeben von ID hat einen großen Einfluss auf die interne Konstruktion von MyBatis. Es ist einem Kommentarobjekt zugeordnet. Weil ein Blog viele Kommentare haben kann, die eine Sammlung sind, wird er mit einer Sammlung abgebildet. Der SELECT gibt weiterhin an, welche Unterabfrage die entsprechenden Kommentare abfragt. Spalten bedeutet, welchen Feldwert der oben gefundene Feldwert als Parameter an die Unterabfrage übergeben wird. Oftype repräsentiert auch den Rückgabetyp. Der Rückgabetyp hier ist der Typ in der Sammlung. Der Grund, warum Oftype anstelle von Typ verwendet wird, ist, dass es in MyBatis verwendet wird, um es von der Vereinigung zu unterscheiden.
Testcode:
@Testpublic void selectComentsByBLogtest () {SQLSession Session = util.getSQLSessionFactory (). OpenSession (); commentMapper commentMapper = session.getMapper (commentMapper.class); LIST <Kommentare = commentMapper.SelectComportmentsByBlog (6); Kommentare) system.out.println (comment); session BlogMapper.SelectBlog (6); Liste <Commentare> comments = blog.getComMents (); if (comments!Das obige ist ein kurzer Überblick über den Ergebnismap in MyBatis, der Ihnen vom Herausgeber vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!