Einführung in 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)
1. Erforderliches JAR -Paket
Hier diskutieren wir die Verwendung von MyBatis separat und setzen Sie einfach das Paket von MyBatis-xxxjar ein.
Wenn Sie Maven verwenden, um ein Projekt zu erstellen, müssen Sie die folgende Konfiguration in die Abhängigkeit von pom.xml einfügen:
<Depopenty> <gruppe> org.mybatis </Groupid> myBatis </artifactId> <version> 3.2.2 </Version> </abhängig>
Das Unternehmen verwendet derzeit 3.2.2 und Sie können die Versionsnummer nach Ihrem eigenen JAR -Paket einfügen.
Wenn Sie in das entsprechende Framework integrieren, müssen Sie das Integrationspaket einstellen. Zum Beispiel verwendet unser Unternehmen MyBatis, um sich in den Frühling zu integrieren.
Sie müssen auch das Paket von MyBatis-Spring-xxx.jar hinzufügen und basierend auf der tatsächlichen Situation entscheiden. Natürlich sind auch Datenbankfahrer -JAR -Pakete unverzichtbar.
2. Erstellen Sie SQLSessionFactory aus XML
Jede MyBatis-basierte Anwendung befindet sich auf eine Instanz von SQLSessionFactory.
Eine Instanz von SQLSessionFactory kann durch SQLSessionFactoryBuilder erhalten werden.
SQLSessionFactoryBuilder kann eine Instanz von SQLSessionFactory aus einer XML-Konfigurationsdatei oder einer vorgezogenen Konfigurationsinstanz erstellen.
Es ist sehr einfach, eine Instanz von SQLSessionFactory aus einer XML -Datei zu erstellen. Es wird empfohlen, die Ressourcendatei unter dem Klassenpfad für die Konfiguration zu verwenden.
Es kann jedoch auch mit jeder InputStream -Instanz konfiguriert werden, einschließlich eines Dateipfads in Form eines Zeichenfolge oder eines Dateipfads in Form einer Datei: // URL.
MyBatis enthält eine Werkzeugklasse namens Ressourcen, die einige praktische Methoden enthält, mit denen Ressourcendateien von Klassenpfad oder anderen Standorten geladen werden können.
Zum Beispiel:
String ressourcen = "mybatis-config.xml"; InputStream ist = Ressourcen.getResourceAsStream (Ressource);
Die XML -Konfigurationsdatei (Konfiguration XML) enthält die Kerneinstellungen für das MyBatis -System, einschließlich der Datenquelle zum Abrufen der Datenbankverbindungsinstanz (DataSource)
und ein Transaktionsmanager (Transaktionsmanager), der den Umfang und den Steuerungsmodus von Transaktionen bestimmt. Die Konfigurationsdatei wird später ausführlich besprochen.
Zum Beispiel:
<!-? xml Version = "1.0" coding = "utf-8"?-> <configuration> <Environments default = "Development"> <Environment ID = "Development"> <transactionManager type = "jdbc"> <datenource type = "Pooled"> <Property name = "driver". value="jdbc:mysql://192.168.200.12:3306/test_mybatis"><property name="username" value="root"><property name="password" value="root123"></property></property></property></datasource></transactionmanager></environment></environments><mappers><!-- Register the Usermainmapper.xml Datei. Usermainmapper.xml befindet sich im Paket com.lanhuigu.mybatis.map, so ressourcen = "com/lanhuigu/mybatis/map/usermainmapper.xml"> </mapper> </mappers> </configuration>
Das Umgebungselementkörper enthält die Konfiguration des Transaktionsmanagements und des Verbindungsbeamtens. Das Mappers -Element enthält eine Reihe von Mapper -Mappers (die XML -Dateien dieser Mapper enthalten SQL -Code- und Zuordnungsdefinitionsinformationen).
3.. Holen Sie sich SQLSession von SQLSessionFactory
Jetzt, da wir die SQLSessionFactory haben, können wir eine Instanz von SQLSESSION von ihr erhalten. SQLSession enthält vollständig alle Methoden, die zur Ausführung von SQL -Befehlen in eine Datenbank erforderlich sind.
Sie können kartierte SQL -Anweisungen direkt über die SQLSession -Instanz ausführen. Zum Beispiel:
SqlSessionFactory SQLSessionFactory = null; // xml Build SQLSessionFactory Factory Instance SQLSession Session Ressourcen.getResourceAsStream (Ressourcen); 1); system.out.println (user.getUnername ());} endlich {session.close ();} Es gibt kein Problem bei der Ausführung von Zuordnungen auf diese Weise. Wir können auch prägnanter Mapping durchführen.
Verwenden Sie eine Schnittstelle, die Parameter und Rückgabewerte für eine bestimmte Anweisung vernünftigerweise beschreiben kann (z. B. Usermainmapper.class),
Sie können jetzt nicht nur klarere und Typ-Safe-Code ausführen, sondern müssen sich auch keine Sorgen um fehleranfällige String-Literale und -absaugen machen. Zum Beispiel:
SQLSession Session = SQLSessionFactory.OpenSession (); UsMainmapper Usmainmapper = Session
4. Beispiel
Es ist leicht, sich durch das Lesen zu verwechseln, aber nicht zu üben. Schauen Sie sich die Beispiele an und lesen Sie das Dokument zurück, vielleicht wird der Effekt besser.
JAR -Paket vorbereiten:
mybatis-3.2.2.jar (mybatis)
Mysql-Connector-Java-5.1.21.jar (Datenbanktreiber)
JUNIT-4.4.JAR (Test, möchte diesen Jungit nicht verwenden. Sie können die Hauptmethode verwenden, um sie zu testen).
Projektstruktur:
Datenbank:
Erstellen Sie die Tabelle `t_user_main` (` f_id` int (11) nicht null, `f_username` varchar (20) Standardnull,` f_age` int (3) Standardnull, Primärschlüssel (`f_Id`)) Engine = myisam Default charset = latin1;
MyBatis 'XML-Konfiguration-Mybatis-config.xml:
<!-? xml Version = "1.0" coding = "utf-8"?-> <configuration> <Environments default = "Development"> <Environment ID = "Development"> <transactionManager type = "jdbc"> <datenource type = "Pooled"> <Property name = "driver". value="jdbc:mysql://192.168.200.12:3306/test_mybatis"><property name="username" value="root"><property name="password" value="root123"></property></property></property></datasource></transactionmanager></environment></environments><mappers><!-- Register the Usermainmapper.xml Datei. Usermainmapper.xml befindet sich im Paket com.lanhuigu.mybatis.map, so ressourcen = "com/lanhuigu/mybatis/map/usermainmapper.xml"> </mapper> </mappers> </configuration>
User.java:
Paket com.lanhuigu.mybatis.Entity; Import Java.io.Serializable; Benutzer öffentliche Klasse implementiert serialisierbar {private statische endgültige long serialversionUid = -341206809734875984l; private Streicher -Username; private username; privat integer vitiere; id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}Usmainmapper.xml:
<!-? xml Version = "1.0" coding = "utf-8"?-> <!-Geben Sie einen eindeutigen Namespace für diesen Mapper an. Der Wert des Namespace wird konventionell auf den Paketnamen eingestellt + Entfernen Sie den Dateinamen des Suffix der SQL -Kartendatei. Dies kann sicherstellen, dass der Wert des Namespace eindeutig ist. For example, namespace="com.lanhuigu.mybatis.map.UserMainMapper" is com.lanhuigu.mybatis.map (package name) + UserMainMapper (UserMainMapper.xml file is removed)--><mapper namespace="com.lanhuigu.mybatis.map.UserMainMapper"> <!-- Write Eine Abfrage -SQL -Anweisung im Tag -Tag auswählen, das ID -Attribut des SELECT -Tags in QueryUSerymainbyID festlegen, der ID -Attributwert muss eindeutig sein, und das ParameterType -Attribut kann nicht wiederverwendet werden, um den in der Abfrage verwendeten Parametertyp anzuzeigen. Das Ergebnistyp-Attribut gibt den von der Abfrageergebnis zurückgegebenen Ergebnis-Set-Typ an. resultType = "com.lanhuigu.mybatis.entity.user"> Wählen
MyBatistest.java Testcode:
Paket com.lanhuigu.mybatis; import Java.io.ioxception; import Java.io.inputStream; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; Import org.apache.ibatis.Session.SQLSESSORTION.SQLESSICE; org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.Entity.User; SQLSessionFactory Factory Instance SQLSession Session Lesen Sie die MyBatis -Konfigurationsdatei und erstellen Sie die SQLSessionFactory Factory -Instanz // ======== 2.1 Verwenden Sie den Klassenlast, um die MyBatis -Konfigurationsdatei zu laden (es wird auch die zugehörige Zuordnungsdatei geladen) // InputStream is = myBatistest.class.getClaslader (). factory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (IS); // ======= 2.2 Verwenden Sie die von MyBatis bereitgestellte Ressourcenklasse, um die Konfigurationsdatei von MyBatis (die zugeordnete Zuordnungsdatei) zu laden). // Erstellen Sie die sqlSessionFactory Factory // SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (Reader); // ===== 2 2.3 Verwenden Sie die von MyBatis bereitgestellte Ressourcenklasse, um MyBatis 'Konfigurationsdatei inputStream zu laden. NEU SQLSessionFactoryBuilder (). Build (IS); // 3. Erstellen Sie eine SQLSessionSession, die SQL in der Mapping -Datei ausführen kann Wert des Tags der usermainmapper.xml -Datei auswählen. Durch den ID -Attributwert des SELECT -Tags * kann die zu ausgeführte SQL durch die Kombination dieser beiden gefunden werden. */// Führen Sie die Abfrage aus und geben Sie ein eindeutiges Benutzerobjekt zurück. Hinweis: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid" ist die Identifikationszeichenfolge, die SQL meldet. User user = session.selectone ("com.lanhuigu.mybatis.map.usermainmapperKonsolenausgabe:
Für das obige Beispiel im Testcode:
User user = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.queryuSerymainbyid", 1); System.out.println (user.getUnername ());Ist dieser Code sehr unangenehm zu verwenden? Wir haben gesagt, es gibt einen direkteren Weg:
Fügen Sie der Projektstrukturkarte eine Zuordnungschnittstelle hinzu:
Paket com.lanhuigu.mybatis.map; Import com.lanhuigu.mybatis.entity.user; Public Interface Usmainmapper {public User QueryUinbyid (int id);};};Ändern Sie gleichzeitig den Testcode wie folgt:
Paket com.lanhuigu.mybatis; import Java.io.ioxception; import Java.io.inputStream; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; Import org.apache.ibatis.Session.SQLSESSORTION.SQLESSICE; org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.Entity.User; Oder Lesen Sie die MyBatis -Konfigurationsdatei und erstellen Sie die SQLSessionFactory Factory -Instanz // ======== 2.1 Verwenden Sie den Klassenlast, um die MyBatis -Konfigurationsdatei zu laden (es wird auch die zugehörige Zuordnungsdatei geladen) // InputStream is = myBatistest.class.getClaslader (). factory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (IS); // ======= 2.2 Verwenden Sie die von MyBatis bereitgestellte Ressourcenklasse, um die Konfigurationsdatei von MyBatis (die zugeordnete Zuordnungsdatei) zu laden). // Erstellen Sie die sqlSessionFactory Factory // SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (Reader); // ===== 2 2.3 Verwenden Sie die von MyBatis bereitgestellte Ressourcenklasse, um MyBatis 'Konfigurationsdatei inputStream zu laden. NEU SQLSessionFactoryBuilder (). Build (IS); // 3. Erstellen Sie eine SQLSessionSession, die SQL in der Mapping -Datei ausführen kann Wert des Tags der usermainmapper.xml -Datei auswählen. Durch den ID -Attributwert des SELECT -Tags * kann die zu ausgeführte SQL durch die Kombination dieser beiden gefunden werden. */// Führen Sie die Abfrage aus und geben Sie ein eindeutiges Benutzerobjekt zurück. Hinweis: "com.lanhuigu.mybatis.map.usermainmapper.QueryuserymainbyId" ist die Identifikationszeichenfolge, die SQL/*user user = session.selectone ("com.lanhuigu.mybatis.map.Usermainmaper.QueryUnbyid", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ". 1); system.out.println (user.getUnername ());*/UsMainmapper usermainmapper = Session Ändern Sie den vorherigen Abfrageteil an:
Usermainmapper usermainmapper = Session.getMapper (usermainmapper.class); user usermainmapper
Verwenden Sie eine Schnittstelle, die Parameter und Rückgabewerte für eine bestimmte Anweisung vernünftigerweise beschreiben kann (z. B. Usermainmapper.class),
Sie können jetzt nicht nur klarere und Typ-Safe-Code ausführen, sondern müssen sich auch keine Sorgen um fehleranfällige String-Literale und -absaugen machen.
Führen Sie den Testcode aus und der Effekt ist der gleiche.
UserMainmapper -Schnittstelle Standort:
Da wir die Schnittstelle hinzugefügt haben, kann MyBatis-config.xml die Konfiguration für den Mapper-Teil ändern und die Paketdatei direkt zuordnen, in der sich die UsMainmapper-Schnittstelle befindet:
Das ist zu
Ändern zu
Die vollständige Konfiguration lautet wie folgt und Sie können sie durch Ausführen des Testcodes überprüfen. Diese Praxis ist leichter auf einheitliche Weise Karten zu pflegen und zu verwalten:
<!-? xml Version = "1.0" coding = "utf-8"?-> <configuration> <Environments default = "Development"> <Environment ID = "Development"> <transactionManager type = "jdbc"> <datenource type = "Pooled"> <Property name = "driver". value="jdbc:mysql://192.168.200.12:3306/test_mybatis"><property name="username" value="root"><property name="password" value="root123"></property></property></property></datasource></transactionmanager></environment></environments><mappers><!-- Register the Usermainmapper.xml Datei. Usermainmapper.xml befindet sich im Paket com.lanhuigu.mybatis.map, so dass die Ressource als com/lanhuigu/mybatis/map/usermainmapper.xml-> <!-<mapper ressource = "com/lanhuigu/mybatis/mapermaker-/mactis/map/mapermaper-/maper/mapermaper-/maper/maper/mapermaper-/mark/mactis/map/mapermapper.xml"-> geschrieben ist. name = "com.lanhuigu.mybatis.map"> </package> </mappers> </configuration>
Wie oben können wir sehen, dass SQL in UserMainmapper.xml immer noch zugeordnet ist, egal wie wir spielen?
Ist diese Implementierung einzigartig? Muss ich XML verwenden?
Natürlich nicht. Wenn Ihr obiger Code erfolgreich geändert und getestet wird, lassen Sie uns die letzte Änderung vornehmen.
Anstatt Usermainmapper.xml zur Implementierung der Zuordnung zu verwenden, verwenden wir JAVA -Anmerkungen zur Implementierung der Zuordnung.
Die Hauptmodifikation ist die Schnittstelle usermainmapper.java, die eine neue Methode QueryUSerymainbyIdNew hinzufügt und Annotationen zur Implementierung der Zuordnung verwendet
MyBatis selbstauflösende Schnittstellenzuordnung.
Modifizierte UserMainmapper.java -Schnittstelle:
Paket com.lanhuigu.mybatis.map; import org.apache.ibatis.annotations.param; org.apache.ibatis.Annotations.Select; Annotation*/@Select ("Select F_ID ID, F_USERNAME Benutzername, F_AGE AGE AUT VON T_USER_MAIN, wobei f_id = $ {id}") öffentlicher Benutzer queryUnymainbyIdNew (@param ("id") int id);};};};} Führen Sie den geänderten Testcode auf folgende Weise aus:
Paket com.lanhuigu.mybatis; import Java.io.ioxception; import Java.io.inputStream; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; Import org.apache.ibatis.Session.SQLSESSORTION.SQLESSICE; org.apache.ibatis.session.sqlSessionFactoryBuilder; import org.junit.test; import com.lanhuigu.mybatis.Entity.User; Oder Lesen Sie die MyBatis -Konfigurationsdatei und erstellen Sie die SQLSessionFactory Factory -Instanz // ======== 2.1 Verwenden Sie den Klassenlast, um die MyBatis -Konfigurationsdatei zu laden (es wird auch die zugehörige Zuordnungsdatei geladen) // InputStream is = myBatistest.class.getClaslader (). factory // sqlSessionFactory = new SQLSessionFactoryBuilder (). Build (IS); // ======= 2.2 Verwenden Sie die von MyBatis bereitgestellte Ressourcenklasse, um die Konfigurationsdatei von MyBatis (die zugeordnete Zuordnungsdatei) zu laden). // Erstellen Sie die sqlSessionFactory Factory // SQLSessionFactory = new SQLSessionFactoryBuilder (). Build (Reader); // ===== 2 2.3 Verwenden Sie die von MyBatis bereitgestellte Ressourcenklasse, um MyBatis 'Konfigurationsdatei inputStream zu laden. NEU SQLSessionFactoryBuilder (). Build (IS); // 3. Erstellen Sie eine SQLSessionSession, die SQL in der Mapping -Datei ausführen kann Wert des Tags der usermainmapper.xml -Datei auswählen. Durch den ID -Attributwert des SELECT -Tags * kann die zu ausgeführte SQL durch die Kombination dieser beiden gefunden werden. */// Führen Sie die Abfrage aus und geben Sie ein eindeutiges Benutzerobjekt zurück. Hinweis: "com.lanhuigu.mybatis.map.usermainmapper.QueryuserymainbyId" ist die Identifikationszeichenfolge, die SQL/*user user = session.selectone ("com.lanhuigu.mybatis.map.Usermainmaper.QueryUnbyid", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ". 1); system.out.println (user.getUnername ());*//*UserMainmapper usermainmapper = Session Session.getMapper (usermainmapper.class); user user = usermainmapper.QueryuserymainbyIdNew (1); System.out.println (user.getUnername ());} schließlich {Session.close.close ();}}}}}}}}}}}}}}}}}}Die oben genannte ist die vollständige Sammlung von MyBatis Introduction (2), die 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!