In diesem Artikel werde ich die Framework -Prinzipien von MyBatis und das Einführungsprogramm von MyBatis vorstellen, um die Hinzufügung, Löschung, Änderung und Inspektion des Benutzers zu erkennen. Was sind seine Vor- und Nachteile und welche Beziehung besteht zwischen Mybatis und Winterschlaf. Ich hoffe, es wird für meine Freunde hilfreich sein. Wenn es irgendwelche Mängel gibt, geben Sie mir bitte einige Ratschläge.
Was ist MyBatis?
MyBatis ist ein Open -Source -Projekt von Apache. Im Jahr 2010 wurde dieses Projekt von der Apache Software Foundation in Google Code verschoben und in MyBatis umbenannt. Im November 2013 nach Github ausgewandert.
MyBatis ist ein hervorragendes Rahmen für Persistenzschicht, das angepasste SQL, gespeicherte Verfahren und erweiterte Zuordnung unterstützt. MyBatis vermeidet fast alle JDBC -Code- und manuellen Einstellungen und Dezimierungsergebnisse. MyBatis verwendet einfache XML oder Anmerkungen, um Primitive zu konfigurieren und zu kartieren, Schnittstellen und Java -Pojos (einfache alte Java -Objekte) in Datenbank in der Datenbank. Einfach ausgedrückt, MyBatis ist ein anhaltendes Schicht -Framework. MyBatis ermöglicht es dem Programm, sich auf SQL zu konzentrieren und SQL -Anweisungen frei und flexibel zu generieren, die den Anforderungen durch die von MyBatis bereitgestellte Zuordnungsmethode entsprechen. MyBatis kann die Eingabeparameter automatisch eingeben, um die Vorbereitungsdaten zu erstellen und die Abfrageergebnisse flexibel in Java -Objekte zuzuordnen.
Lassen Sie uns als nächstes das Rahmenprinzip von MyBatis durch ein Bild verstehen:
Erklärung der Rahmenarchitektur:
A. Ladekonfigurationsdatei: Die Konfiguration stammt von zwei Stellen, einer ist die Konfigurationsdatei und die andere ist die Annotation des Java -Code. Die Konfigurationsinformationen von SQL werden in Kartellobjekte geladen (einschließlich der übergebenen Parameterzuordnungskonfiguration, ausgeführter SQL -Anweisungen und der Konfiguration der Ergebniszuordnung) und im Speicher gespeichert.
B. SQL Parsing: Wenn die API -Schnittstellenschicht die Anrufanforderung empfängt, empfängt sie die ID des eingehenden SLQ und des eingehenden Objekts (kann MAP- oder BASIC -Datentyp). MyBatis findet die entsprechende Kartierstatement basierend auf der ID des SQL und anschließend die Kartierstatement basierend auf dem eingehenden Parameterobjekt. Nach der Parsen können Sie am Ende die SQL -Anweisungen und Parameter ausgeführt werden.
C. SQL -Ausführung: Nehmen Sie die endgültigen SQL und Parameter zur Ausführung in die Datenbank und erhalten Sie die Ergebnisse des Betriebs der Datenbank.
D. Ergebniszuordnung: Konvertieren Sie die Ergebnisse der Betriebsdatenbank gemäß der Zuordnungskonfiguration, die in HashMap-, JavaBean- oder Basis -Datentyp konvertiert werden kann und das Endergebnis zurückgibt.
MyBatis Erste Schritte -Programmanalyse
Als nächstes stellt der Herausgeber die spezifischen Anforderungen in Kombination mit der Demo ein, und die Anforderungen sind wie folgt:
Benutzerinformationen basierend auf der Benutzer -ID abfragen;
Abfragen von Benutzerinformationen fuzzyly basierend auf dem Benutzernamen;
Benutzer hinzufügen, löschen und aktualisieren.
Der erste Schritt besteht darin, verschiedene Pakete und Klassen zu erstellen. Das Projektverzeichnis lautet wie folgt:
Der zweite Schritt besteht darin, den Inhalt in sqlmapconfig.xml zu schreiben und die laufende Umgebung, die Datenquelle, die Transaktionen usw. von MyBatis zu konfigurieren. Der Code sieht so aus:
<span style = "Schriftfamilie: Comic sans ms; Schriftgröße: 18px;"> <xml Version = "1.0" coding = "utf-8"?> <! docType configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-Umgebungen Die Konfiguration wird abgeschafft, nachdem der Spring integriert ist-> <Environments default = "entwickeln"> <! Pool, verwaltet von mybatis -> <dataSource type = "befragt"> <Eigenschaft name = "treiber" value = "$ {jdbc.driver}"/> <Eigenschaft name = "url" value = "$ {jdbc.url}"/> <Property name = "userername" value = "$ {{JDBC.UERN}}}". value = "$ {jdbc.password}"/> </dataSource> </Umgebungen> <!-Laden der Kartendatei-> <mappers> Resource = "SQLMAP/user.xml"/> </mappers> </configuration> </span>Der dritte Schritt besteht darin, den Inhalt in user.java zu schreiben, wie unten gezeigt:
<span style = "Schriftfamilie: Comic sans ms; Schriftgröße: 18px;"> Paket cn.itcast.mybatis.po; import Java.util.date; /** * * <P> Titel: Benutzer </p> * <P> Beschreibung: Benutzer po </p> * @author ding Guohua * @date 31. Juli 2016 15:39:04 * @Version 1.0 */öffentliche Klasse Benutzer {// Der Attributname entspricht den Feldern der Datenbanktabelle private Int Id; private String -Benutzername; // Benutzername private String Sex; // Geschlecht Privatdatum Geburtstag; // Geburtstag private String -Adresse; // Adresse public int getId () {return id; } public void setId (int id) {this.id = id; } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } public String getSex () {Return Sex; } public void setsex (String sex) {this.sex = sex; } public date getBirthday () {Return Birthday; } public void setBirthday (Datum Geburtstag) {this.birthday = Geburtstag; } public String getAddress () {Rückgabeadresse; } public void setAddress (String -Adresse) {this.address = address; } @Override public String toString () {return "user [id =" + id + ", userername =" + userername + ", sex =" + sex + ", biurthot =" + birthday + ", adress =" + adress + "]"; }} </span>Schritt 4: Um die Funktion des Hinzufügens, Löschens, Änderns und Suchens zu implementieren, schreiben Sie zuerst den Inhalt in user.xml, wie unten gezeigt:
<span style = "Schriftfamilie: Comic sans ms; Schriftgröße: 18px;"> <xml Version = "1.0" coding = "utf-8"?> <! docType mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <! Datei-> <!-Anforderungen: Abfragen Sie die Datensätze der Benutzertabelle über ID-> <!-Datenbank-Abfrage-ID aus. Identifizieren Sie die SQL in der Zuordnungsdatei die SQL-Anweisung in ein Mattestatement-Objekt. Eingabe und der Parametername ist ID. Wenn der Eingabeparameter ein einfacher Typ ist, kann der Parametername in #{} willkürlich sein und Wert oder andere Namens -Ergebnistypen sein: Geben Sie den Typ des zugeordneten Java -Objekts des Ausgabeergebnisses des SQL an und wählen Sie das Ergebnis an, um das Java -Objekt zu repräsentieren. -> <select id = "findUserById" parameterType = "int" resultType = "cn.itcast.mybatis.po.User"> SELECT * Vom Benutzer wob Die SQL -Zeichenfolge und das Spleißen des Inhalts der empfangenen Parameter in SQL ohne Änderung. Verwenden Sie $ {}, um SQL zu spleißen, wodurch SQL $ {value}: den Inhalt der Eingabeparameter empfangen wird. Wenn der eingehende Typ ein einfacher Typ ist, können Sie den Wert $ {}-> <select id = "findUserByName" ParameterType = "java.lang.String" resultType = "cn.itcast.mybatis.po.User"> SELECT * AUSSERNAMEDER NUTZERNAME DAS IVENDE $ $ {value} ig}} ig} ig} ig} ig} ig} ig} {/select add. Parametertyp ist Pojo (einschließlich Benutzerinformationen) Geben Sie den Attributnamen des Pojo in #{} an, empfangen Sie den Attributwert des Pojo-Objekts, MyBatis erhält den Attributwert des Objekts über ognl-> <Insert id = "Insertuser" Parametertyp = "cn.itcast.mybatis.po.Po.Po.S.User. Last_insert_id (): Erhalten Sie den gerade aufgezeichneten Primärschlüsselwert, das nur für den selbstverwachsenden Primärschlüsselschlüsselantrieb anwendbar ist: Setzen Sie den Primärschlüsselwert der Abfrage in die Eigenschaft des von ParameterType angegebenen Objekts fest KeyProperty = "id" order = "After" resultType = "java.lang.Ineger"> select last_inser_id () </selectKey> in den Benutzer einfügen (Benutzername, Sex, Sex, Adresse) Wert (#{Benutzername},#{Geburtstag},#{sex}, {adress}) <! Nehmen Sie zunächst den Primärschlüssel über UUID, setzen Sie den Primärschlüssel auf das ID-Attribut des Benutzerobjekts und entfernen Sie dann beim Ausführen des Einfügung den ID-Attributwert aus dem Benutzerobjekt-> <Selectkey KeyProperty = "ID" order = "vor" vor "resultType =" java.lang.String "> SELECT UUID (). value (#{userername},#{birthday},#{sex},#{address}); </einfügen> <!-Um den Benutzer zu löschen, um den Benutzer basierend auf der ID zu löschen, müssen Sie den ID-Wert eingeben. Das Benutzerobjekt, einschließlich der ID- und Aktualisierungsinformationen. Hinweis: Die ID muss#{ID} vorhanden sein: Nehmen Sie den ID -Attributwert aus dem Eingabe -Benutzerobjekt. </mapper> </span>Schritt 5: Schreiben Sie die spezifische Methode wie folgt:
<span style = "Schriftfamilie: Comic sans ms; Schriftgröße: 18px;"> Paket cn.itcast.mybatis.First; importieren java.io.ioException; importieren java.io.inputstream; import Java.util.date; importieren java.util.list; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlSessionFactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import cn.itcast.mybatis.po.user; öffentliche Klasse MyBatisFirst {// Benutzerinformationen basierend auf der ID abfragen und ein Datensatzergebnis @test public voiduserByIdTest () abrufen. // Konfigurationsdatei Stream InputStream InputStream = Ressourcen.GetResourceAsStream (Ressource) abrufen; // eine Sitzungsfabrik erstellen und in myBatis -Konfigurationsdateien übergeben SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder () .build (InputStream); // sqlSession durch die fabrik sqlSession sqlSession = sqlSessionFactory.openSession () erhalten; // Die Datenbank über SQLSession betreiben // Der erste Parameter: Die ID der Anweisung in der Kartendatei ist gleich = namespace+ "."+ ID der Anweisung // Der zweite Parameter: Geben Sie den Parameter des Parametertyptyps an, das in der Kartendatei übereinstimmt. SQLSession.Selectone ("test.finduserbyid", 1); System.out.println (Benutzer); // die Ressource sqlSession.close () freigeben; } // Fuzzy Abfragen Sie die Benutzerliste basierend auf dem Benutzernamen @test public void findUserbynametest () löscht IOException {// myBatis configuration datei String Resource = "SQLMAPConfig.xml" aus; // Erhalten Sie die Konfigurationsdatei InputStream InputStream = Ressourcen.getResourceAsStream (Ressource); // Erstellen Sie eine Sitzungsfabrik und übergeben Sie in MyBatis -Konfigurationsdatei Informationen SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (InputStream); // sqlSession durch die fabrik sqlSession sqlSession = sqlSessionFactory.openSession () erhalten; // Der Benutzer in der Liste in der Liste entspricht dem vom deutschen Ergebnistyp angegebenen Typ in der Zuordnungsdateiliste <Benetzes> list = sqlSession.selectList ("test.finduserByName", "xiao ming"); System.out.println (Liste); sqlSession.close (); } public void InsertUserTest () löst IOException aus {// mybatis configuration Datei String ressource = "sqlmapConfig"; // Konfigurationsdatei Stream InputStream InputStream = Ressourcen.GetResourceAsStream (Ressource) abrufen; // Erstellen Sie eine Sitzungsfabrik und übergeben Sie in MyBatis -Konfigurationsdatei Informationen SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (InputStream); // sqlSession durch die fabrik sqlSession sqlSession = sqlSessionFactory.openSession () erhalten; // Einfügen des Benutzerobjekts user user = new user (); user.setUserName ("Ding Guohua"); user.setBirthday (neues Datum ()); user.setSex ("1"); user.setAddress ("anhui hefei"); // Der Benutzer in der Liste und der vom Ergebnistyp in der Zuordnungsdatei angegebene Typ sind immer sqlSession.insert ("test.insertuser", Benutzer); // Dinge einreichen sqlSession.commit (); // Die Sitzung sqlSession.close () schließen; } // Benutzerinformationen basierend auf id @test public void deleteUtertest () löscht ioException {// myBatis configuration datei String ressource = "sqlmapconfig.xml"; // Konfigurationsdatei Stream InputStream InputStream = Ressourcen.GetResourceAsStream (Ressource) abrufen; // Erstellen Sie eine Fabrik und übergeben Sie in myBatis -Konfigurationsdateien Informationen SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (InputStream); // sqlSession durch die fabrik sqlSession sqlSession = sqlSessionFactory.openSession () erhalten; // Übergabe eingehender ID Löschen Benutzer SQLSession.delete ("test.deleteUser", 39); // Dinge einreichen sqlSession.commit (); // Die Sitzung sqlSession.close () schließen; } // Benutzerinformationen @test public void updateUsertest () löscht IOException {// MyBatis -Konfigurationsdatei String Resource = "SQLMAPConfig.xml" aus; // Konfigurationsdatei Stream InputStream InputStream = Ressourcen.GetResourceAsStream (Ressource) abrufen; // eine Sitzungsfabrik erstellen und in myBatis -Konfigurationsdateien übergeben SQLSessionFactory SQLSessionFactory = new SQLSessionFactoryBuilder () .build (InputStream); // sqlSession durch die fabrik sqlSession sqlSession = sqlSessionFactory.openSession () erhalten; // user user = new user () aktualisieren; // id id user.setId (41); user.setUserName ("Ding Guohua"); user.setBirthday (neues Datum ()); user.setSex ("2"); user.setAddress ("anhui hefei"); sqlSession.update ("test.Updateuser", Benutzer); // transaktion sqlSession.commit () begehen; // Sitzung sqlSession.close (); }} </span>Vor- und Nachteile von MyBatis
Vorteil:
A. Einfach zu beginnen und zu meistern.
B. SQL ist in XML geschrieben, was ein einheitliches Management und Optimierung erleichtert.
C. Dekuple SQL und Programmcode.
D. Geben Sie Mapping -Tags zur Unterstützung von ORM -Feldbeziehungszuordnungen zwischen Objekten und Datenbanken an
e. Geben Sie Objektbeziehungs -Zuordnungs -Tags zur Unterstützung der Konstruktion und Wartung von Objektbeziehungen zur Verfügung
F. Geben Sie XML -Tags an und unterstützen Sie das Schreiben dynamischer SQL.
Mangel:
A. Die SQL -Arbeitsbelastung ist sehr hoch, insbesondere wenn es viele Felder und viele verwandte Tabellen gibt.
B. SQL hängt von der Datenbank ab, was zu einer schlechten Datenbank -Portabilität führt.
C. Da die Tag -ID in der XML eindeutig sein muss, unterstützen die Methoden in DAO keine Überladung der Methode.
D. Die DAO -Schicht ist zu einfach und die Arbeitsbelastung der Objektbaugruppe ist relativ groß.
e. Eine unsachgemäße Verwendung von Cache kann leicht schmutzige Daten generieren.
Vergleich zwischen MyBatis und Winterschlafa
Ähnlichkeiten: Hibernate und MyBatis können SessionFactory aus der XML -Konfigurationsdatei über SessionFactoryBuilder generieren und dann eine Sitzung von SessionFactroy generieren. Schließlich beginnt die Sitzung mit der Ausführung von Dingen und SQL -Anweisungen. Die Lebenszyklen von SessionFactoryBuilder, SessionFactory und Session sind fast gleich.
Unterschiede:
mybatis: klein, bequem, effizient, einfach, direkt, halbautomatisch;
Hibernate: leistungsstark, bequem, effizient, komplex, Biegungen, vollautomatisch;
mybatis:
A. Einfach loslegen, lernen und benutzen es so schnell wie möglich. Es bietet eine automatische Objektbindungsfunktion für Datenbankabfragen und setzt viele SQL -Nutzungserfahrungen fort. Es ist perfekt für Projekte, die keine so hohen Objektmodellanforderungen haben.
B. Eine detailliertere SQL -Optimierung kann durchgeführt und Abfragebelder reduziert werden.
C. Der Nachteil ist, dass das Rahmen noch relativ einfach ist und die Funktionen noch fehlen. Obwohl der Datenbindungscode vereinfacht ist, muss die gesamte zugrunde liegende Datenbankabfrage tatsächlich selbst geschrieben werden, die Workload ist relativ groß und es ist nicht einfach, sich an die Änderung der schnellen Datenbank anzupassen.
D. Der sekundäre Caching -Mechanismus ist schlecht.
überwintern:
A. Starke Funktionen, gute Datenbank -Irrelevanz und starke O/R -Kartierungsfunktionen. Wenn Sie einen Hibernate ziemlich gut beherrschen und den Winterschlaf ordnungsgemäß zusammenfassen, ist der gesamte Code für Persistenzschicht Ihres Projekts recht einfach, der Code, der geschrieben werden muss, ist sehr hoch, die Entwicklungsgeschwindigkeit ist sehr schnell und sehr cool.
B. Es gibt einen besseren sekundären Caching-Mechanismus, und es kann ein Drittanbieter-Caching verwendet werden.
C. Der Nachteil ist, dass die Lernschwelle nicht niedrig ist und dass Sie es beherrschen müssen. So entwerfen Sie O/R -Mapping, wie Sie das Leistungs- und Objektmodell ausgleichen und wie Sie Hibernate gut verwenden, erfordert Ihre Erfahrung und Fähigkeit, stark zu sein.
Lassen Sie mich Ihnen eine lebendige Metapher geben:
MyBatis: Mechanische Werkzeuge sind einfach zu bedienen und können so bald wie möglich verwendet werden, aber die Arbeit muss noch von Ihnen selbst erledigt werden, aber die Werkzeuge sind lebendig. Wie sie sie herstellen, hängt also von mir ab.
Hibernate: Intelligenter Roboter, aber es ist sehr teuer, ihn zu entwickeln (Lernen, Kenntnisse) und Arbeit können es loswerden, aber nur das, was es kann.
Meldung des Herausgebers: In diesem Blog -Beitrag stellte der Editor hauptsächlich kurz die Grundkenntnisse von MyBatis vor, einschließlich einer einfachen Demo des Hinzufügens, Löschens, Änderns und Suchens, der Vor- und Nachteile von MyBatis sowie dem Vergleich zwischen Hibernate und MyBatis. Die Ähnlichkeiten und Unterschiede zwischen ihnen. MyBatis ist einfach ein Persistenzschichtgerüst. MyBatis ermöglicht es dem Programm, sich auf SQL zu konzentrieren und SQL -Anweisungen frei und flexibel zu generieren, die den Anforderungen durch die von MyBatis bereitgestellte Zuordnungsmethode entsprechen. MyBatis kann die Eingabeparameter automatisch für die Vorbereitung eingeben und das Abfrageergebnis flexibel in Java -Objekte abbilden.
Das obige ist das Einführungs -Tutorial für den vom Herausgeber eingeführten MyBatis -Prinzip -Überblick. 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!