Für diejenigen, die sich nicht sehr über die Grundlagen von MyBatis befassen, finden Sie in diesem Artikel: MyBatis Introduction Learning Tutorial (i) - MyBatis Quick Einführung.
Treffen Sie 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.
Der Begriff Ibatis stammt aus der Kombination von "Internet" und "Abatis" und ist ein Java-basierter Persistenzschicht-Framework. Ibatis bietet Persistenzschicht -Frameworks einschließlich SQL -Karten und Datenzugriffsobjekten (DAO)
MyBatis Bildalbum
Einführung
Ich habe die einfache Abfrage- und Verwaltungsabfrage der Datenbank zuvor erwähnt. Es gibt einige eins zu eins, eins-zu-viele-zu-Viele-zu-viele-zu-viele-Nachfrage-Developments in den Entwicklungsanforderungen. Wenn Sie beispielsweise Einkaufswagen entwickeln, sind die Bestellungen und Benutzer eins zu eins, die Benutzer und Bestellungen sind eins zu viele, und die Benutzer und Produkte sind viele zu viele. Diese sind auch bei der Entwicklung von Hibernate üblich. Sie werden durch Datenzuordnung in Hibernate implementiert und in MyBatis werden sie durch Datenzuordnung in Konfigurationsdateien implementiert.
Eins-zu-Eins-Anfrage
Wenn wir Auftragsinformationen abfragen und die Benutzerinformationen von Abfragen zum Erstellen von Bestellungen verknüpfen möchten, ist dies eine typische Eins-zu-Eins-Abfrage. Es gibt zwei Möglichkeiten, eins-zu-Eins-Abfragen zu implementieren: Verwenden Sie das Ergebnistyp und resultMap. Das Ergebnistyp erfordert eine zusätzliche Pojo -Definition, und dann entsprechen die Abfragebelder dem neu definierten Pojo einzeln. resultMap muss eine Eins-zu-Eins-Korrelation zwischen zwei Pojos über Konfigurationsdateien implementieren. Implementieren wir diese beiden Methoden weiter unten.
Ergebnistyp:
1. Erstellen Sie ein Pojo und fügen Sie die neuen Attribute hinzu, die dem neuen Pojo zugeordnet werden müssen.
öffentliche Klasse OrderCustom erweitert Bestellungen {// Benutzerinformationen privater String -Benutzername hinzufügen; privater String Sex; private String -Adresse; 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 String getAddress () {Rückgabeadresse; } public void setAddress (String -Adresse) {this.address = address; }}2. Mapping -Dateien:
<select id = "findOrderUser" resultType = "com.luchao.mybatis.first.po.orderCustom"> Bestellungen auswählen.
3. Implementierung der Mapper -Schnittstelle:
// Abfragebehörungen und Benutzerinformationen öffentliche Liste <RoderalCustom> findOrderuser () löst eine Ausnahme aus;
4. Testcode:
public void findOrtersuser () löst Ausnahme aus {// das SQLSession -Objekt sqlSession sqlSession = sqlSessionFactory.openSession () abrufen; // Erstellen Sie das OrderMapper -Objekt, MyBatis generiert automatisch den Mapper -Proxy -OrderMapper ordermapper = sqlSession.getMapper (ordermapper.class); // Rufen Sie die orderMapper -Methode auf, um Order- und Benutzerinformationsliste zu abfragen. System.out.println (ordercustoms.size ()); }resultMap Implementierung:
resultMap ordnet die Auftragsinformationen im Abfrageergebnis zum Bestellungsobjekt ab, fügt das Benutzerattribut in der Klasse Bestellungen hinzu und ordnet die zugehörigen Abfrage -Benutzerinformationen dem Benutzerattribut im Objekt des Bestells ab.
1. Erstellen Sie ein Pojo und fügen Sie das Benutzerattribut der Bestellklasse hinzu.
öffentliche Klassenbestellungen {private Integer id; private Integer userId; private Zeichenfolgennummer; privates Date Createtime; private String -Notiz; // Benutzerinformationen privater Benutzer Benutzer; // Eintrag private Liste <orderDetail> orderDetails; public Integer getid () {return id; } public void setId (Integer id) {this.id = id; } public Integer getUserid () {userID zurückgeben; } public void setUerId (Integer userId) {this.userId = userId; } public String getNumber () {Rückgabenummer; } public void setNumber (String -Nummer) {this.number = number == null? NULL: number.trim (); } public date getCreateTime () {return CreateTime; } public void setCreateTime (Datum CreateTime) {this.createTime = CreateTime; } public String getNote () {return Anmerkung; } public void setNote (string note) {this.note = note == null? null: note.trim (); } public user getUser () {zurückgebener Benutzer; } public void setUser (Benutzer Benutzer) {this.user = user; } publiclist <orderDetail> getOrderDetails () {return orderDetails; } public void setOrderDetails (Liste <orderDetail> orderDetails) {this.orderDetails = orderDetails; }}2. Mapping -Dateien:
<!-Abfragen Sie die Ergebnismap des zugehörigen Benutzers ab und ordnen Sie das gesamte Abfrageergebnis auf Bestellungen ab-> <resultMap type = "com.luchao.mybatis.First.Po.Orders" id = "ordnersuSresultMap"> <id column = "id" id "id" /> <resultSuSresultMap ". column = "createTime" property = "createTime" /> <result column = "note" property = "note" /> <!-Konfigurieren Sie die zugehörigen Benutzerinformationen der Zuordnung-> <!-Assoziation: Wird verwendet, um Informationen für eine zugehörige Abfrage einzelne Objekteigenschaften zuzuordnen: Welche Eigenschaft in Bestellungen, um die Benutzerinformationen der zugeordneten Abfrage an-> <Association zuzuordnen. <!-ID: Eindeutige ID der zugeordneten Abfrage-Benutzerspalte: Geben Sie die Spalte an, in der Benutzerinformationen eindeutig identifiziert werden. id = "findOrderUmap" resultmap = "ordnersuserresultmap"> Bestellungen auswählen.
Assoziation: Wird verwendet, um Informationen einer zugeordneten Abfrage einzelne Objekt zuzuordnen, Eigenschaft: Welche Eigenschaft in Bestellungen zur Erbänzung der Benutzerinformationen der zugehörigen Abfrage zuordnen.
A. Mapper -Schnittstelle
// Abfragebehörungen und Benutzerinformationen über resultMap Public List <ordnungen> findOrderUsermap () löst eine Ausnahme aus;
4. Testcode:
public void findOrtersusmap () löst Ausnahme aus {// das SQLSession -Objekt sqlSession sqlSession = sqlSessionFactory.OpenSession () abrufen; // Erstellen Sie das OrderMapper -Objekt, MyBatis generiert automatisch Mapper -Proxy OrderMapper OrderMapper = SQLSession.getMapper (ordermapper.class); // Rufen Sie die OrderMapper -Methode an, um die Liste der Bestell- und Benutzerinformationen zu befragen. System.out.println (ordners.size ()); }resultType und resultmap implementieren ein-zu-eins-Abfragezusammenfassung:
ERGEBNISSTYPE: Es ist relativ einfach, mit dem Ergebnistyp zu implementieren. Wenn der Name der Abfragespalten nicht im Pojo enthalten ist, müssen Sie die entsprechenden Attribute des Spaltennamens hinzufügen, um die Zuordnung zu vervollständigen. Wenn es keine besonderen Anforderungen an Abfrageergebnisse gibt, wird empfohlen, das Ergebnistyp zu verwenden.
resultMap: Der resultmap muss separat definiert werden, was etwas problematisch ist. Wenn es spezielle Anforderungen an Abfrageergebnisse gibt, kann die Verwendung von Ergebnismap die Attribute des zugehörigen Abfrage -Mapping -Pojo abschließen. resultMap kann faule Laden implementieren, das Ergebnistyp kann keine faulen Laden implementieren.
Eins-zu-Vielfalt-Anfrage
Wenn Sie die Bestell- und Bestelldetails abfragen müssen, ist dies die Eins-zu-viele-Abfrageanforderung.
1. Pojo ist das gleiche wie das Pojo der Orden in der obigen Ergebnismap. Legen Sie die Auftragsdetails auf die Liste als Attribut der Bestellung ein.
2. Mapping -Dateien:
<!-Karte für Auftrags- und Auftragsdetails und Benutzerinformationen. Verwenden Sie die Vererbung nicht, um Bestell- und Benutzerinformationen zu konfigurieren-> <resultmap type = "com.luchao.mybatis.First.po.Orders" id = "ordnersorderDetailResultmap" Explents = "ordnersuSresultmap"> <collectionDetails = "orderdetails". OFTYPE = "com.luchao.mybatis.first.po.orderDetail"> <resultal column = "orderDetail_id" Property = "id" /> <resultal = "items_id" Eigenschaft = "itemsId" /> <resultal column = "items_num" Property ". id = "findOrderArderDetailMap" resultMap = "ordnersOrderDetailResultMap"> Bestellungen auswählen. user.id und orderDetail.orders_id = orders.id </select>
Der Ergebnis der Bestellungen und Auftragsdetails wird mithilfe von Erweiterungen vererbt, und es ist nicht erforderlich, die Zuordnung von Bestellinformationen und Benutzerinformationen zu konfigurieren.
Sammlung: Kartieren Sie mehrere Datensätze dem Sammelobjekt für die Association -Abfrage, Eigenschaft: Karten Sie mehrere Datensätze in die Eigenschaft der Bestellungen.
OFTYPE: Gibt den Typ an, der das Pojo im Listensammelsattribut abbildet. Beachten Sie, dass es immer noch einen Unterschied zwischen typisch und eins zu eins gibt.
3. Mapper -Schnittstelle:
// Anfrage von Bestellungen, Bestelldetails und Benutzerinformationen über Ergebnismap
öffentliche Liste <bestellungen> findOrderArderDetailMap () löst eine Ausnahme aus;
4. Testcode:
public void findOrderArdorderDetailMap () löst Ausnahme aus {// das SQLSession -Objekt sqlSession sqlSession = sqlSessionFactory.openSession (); // Erstellen Sie das OrderMapper -Objekt, MyBatis generiert automatisch Mapper -Proxy OrderMapper OrderMapper = SQLSession.getMapper (ordermapper.class); // Rufen Sie die OrderMapper -Methode an, um die Liste der Bestell- und Benutzerinformationen zu befragen. System.out.println (ordners.get (). GetOrderDetails (). Size ()); System.out.println (ordners.size ()); }Eins-zu-Vielfalt-Zusammenfassung:
MyBatis verwendet die Sammlung von ResultMap, um mehrere Datensätze der zugehörigen Abfrage in eine Listensammelseigenschaft zuzuordnen.
Implementierung mit Ergebnistyp:
Zuordnungsdetails in OrderDetails In Bestellungen müssen Sie sie selbst verarbeiten, mit einer Doppelschleife durchqueren, doppelte Datensätze entfernen und Auftragsdetails in OrderDetails platzieren. Dies wird problematischer sein.
Viele zu vielen
Wenn wir die Produktinformationen von Benutzern und Benutzern abfragen, ist dies viele zu viele und Sie können MyBatis 'Viele-zu-Viele-Kartierungen verwenden.
Benutzerinformationen in den Benutzer abgeben. Fügen Sie in der Benutzerklasse die Liste der Bestellliste hinzu.
1. Pojo
öffentliche Klasse OrderDetail {private Integer id; private Ganzzahl ordnungsgemäß; private Ganzzahl itemsid; private Ganzzahlartikel; // Produktinformationen private Artikel Artikel; public Integer getid () {return id; } public void setId (Integer id) {this.id = id; } public Integer getordersid () {return ordnerssid; } public void setOrdersid (Integer ordnerssid) {this.ordersid = ordnerssid; } public Integer getItemsid () {return itemsId; } public void setItemsid (integer itemsid) {this.Itemsid = itemsidsid; } public Integer getItemsnum () {return itemsnum; } public void setItemsnum (Integer itemsnum) {this.Itemsnum = itemsnum; } öffentliche Elemente getItems () {Return items; } public void setItems (Elementelemente) {this.items = items; } @Override public String toString () {return "orderDetail [id =" + id + ", ordersid =" + ordnerssid + ", itemssid =" + itemsid + ", itemsnum =" + itemsnum + "]"; }}2. Mapping -Dateien:
<!-- Query the user and purchased products--> <resultMap type="com.luchao.mybatis.first.po.User" id="ordersItemsResultMap"> <!-- User information--> <id column="user_id" property="id" /> <result column="username" property="username" /> <result column="sex" property="sex" /> <result column = "adress" Property = "Adresse" /> <!-Auftragsinformationen Ein Benutzer entspricht mehreren Bestellungen. Verwenden Sie die Sammlung Mapping-> <Collection Property = "ordnerslist" OFTYPE = "com.luchao.mybatis.first.po.Orders"> <id "id" id ". column = "createTime" property = "createTime" /> <result column = "note" property = "note" /> <!-Auftragsdetails Eine Bestellung enthält mehrere Details-> <Collection Property = "orderDetails" ofType = "com.luchao.mybatis.first.po.OrderDetails-<id Column =" column="items_num" property="itemsNum" /> <result column="orders_id" property="ordersId" /> <!-- Product information One order details correspond to one product --> <association property="items" javaType="com.luchao.mybatis.first.po.Items"> <id column="items_id" property="id" /> <result column="items_name" property="name" /> <result column = "items_detail" property = "detail"/> <result column = "items_price" Property = "price"/> </assoziation> </collection> </collection> </resultMap> <select id = "findOrderandItemMap" resultmap = "ordnersesresresresresresresresres.-Awnds -Bestellungen. orderDetail_id, orderDetail.items_id, orderDetail.items_num, orderDetail.orders_id, id is ids_id, ids.name items_name.detail its orderDetail.items_id = items.id </select>
Es ist zu erkennen, dass viele zu viele viele zu einer Kombination aus Eins-zu-Viele und Eins-zu-Eins sind. Alle komplexen Probleme sind im Grunde genommen Kombinationen von einfachen Problemen. Solange Sie sie sorgfältig analysieren, können Sie die Prinzipien verstehen.
3. Mapper -Schnittstelle:
// Anfragebestellung, Bestelldetails und Benutzerinformationen über resultMap Public List <Bener> FindOrderandItemMap () löst eine Ausnahme aus.
4. Testcode:
public void findOrderandItemmap () löst eine Ausnahme aus {// das SQLSession -Objekt sqlSession sqlSession = sqlSessionFactory.openSession () abrufen; // Erstellen Sie das OrderMapper -Objekt, MyBatis generiert automatisch Mapper -Proxy OrderMapper OrderMapper = SQLSession.getMapper (ordermapper.class); // Rufen Sie die orderMapper -Methode an, um Order- und Benutzerinformationsliste zu befragen. System.out.println (users.get (). GetOrderSlist (). Get () .getOrderDetails (). Get (). GetId ()); // system.out.println (ordners.size ()); }Viele-zu-Viele-Query-Zusammenfassung:
Die oben genannten Anforderungen verwenden das Ergebnistyp, um die abgefragten Datensätze in ein erweitertes Pojo zuzuordnen, das sehr einfach die Funktion einer detaillierten Liste implementieren kann. Dies kann jedoch nicht eine verzögerte Belastung erreichen. Verwenden Sie Ergebnismap, um eine detaillierte Liste der von den Benutzern gekauften Elemente an ein Objekt zuzuordnen, das das faule Laden ermöglicht. Die Verwendung von resultMap ist für die Funktionen, die spezielle Anforderungen für die Abfrageergebniszuordnung haben, z. B. die Zuordnung von speziellen Anforderungen in Listen, einschließlich mehrerer Listen.
Ergebnismap Zusammenfassung
1. Ergebnistyp:
Wirkung:
Zeichnen Sie die Abfrageergebnisse in Pojo gemäß dem SQL -Spaltennamen POJO -Attributname -Konsistenz ab.
Gelegenheit:
Gemeinsame Anzeige detaillierter Datensätze, z. B. wenn Benutzer Produktdetails kaufen und alle zugehörigen Abfrageinformationen auf der Seite anzeigen, können Sie direkt den Ergebnistyp verwenden, um jeden Datensatz in ein Pojo zuzuordnen und die Liste (Pojo in der Liste) auf der Front-End-Seite zu durchqueren.
2. resultMap:
Verwenden Sie Association und Sammlung, um eins zu eins und ein-zu-Viele erweiterte Mapping zu vervollständigen (es gibt spezielle Zuordnungsanforderungen für die Ergebnisse).
Verein:
Wirkung:
Zeichnen Sie die zugehörigen Abfrageinformationen in ein Pojo -Objekt ab.
Gelegenheit:
Um die Abfragen zugeordneten Informationen zu erleichtern, können Sie mit Association zugehörige Auftragsinformationen in Pojo -Attribute von Benutzerobjekten abgeben, z. B.: Abfragestellungen und zugehörige Benutzerinformationen.
Wenn Sie den Ergebnistyp verwenden, kann die Abfrageergebnisse nicht dem Pojo -Attribut des Pojo -Objekts zugeordnet werden. Wählen Sie, ob das Ergebnistyp oder das Ergebnismap entsprechend den Anforderungen des Durchquerens der Abfrage "Ergebnismenge" verwendet werden soll.
Sammlung:
Wirkung:
Zeichnen Sie die zugehörigen Abfrageinformationen in eine Listensammlung ab.
Gelegenheit:
Um die Abfragebrachungsinformationen zu erleichtern, können Sie die Sammlung der Assoziationsinformationen der Listensammlung abbilden. Zum Beispiel: Abfragen des Benutzerberechtigungsumfangsmoduls und des Menüs im Modul können Sie die Sammlung verwenden, um die Modulliste zu kartieren, um die Menülistenattribute des Modulobjekts zu kartieren. Der Zweck davon ist, die Abfrage des Abfrageergebnisses zu erleichtern.
Wenn Sie das Ergebnistyp verwenden, können Sie die Abfrageergebnisse nicht der Listensammlung zuordnen.
Der obige Inhalt ist das MyBatis Advanced Mapping Learning Tutorial, das Ihnen vom Herausgeber vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie mehr wissen möchten, achten Sie bitte auf die Website wulin.com!