MyBatis ist ein hervorragendes Rahmen für Persistenzschicht, das normale SQL -Abfragen, gespeicherte Verfahren und erweiterte Zuordnung unterstützt. MyBatis eliminiert manuelle Einstellungen fast aller JDBC -Code und -Parameter und die Suche nach Ergebnissätzen. MyBatis verwendet einfache XML oder Anmerkungen zur Konfiguration und ursprüngliche Zuordnung, um Schnittstellen und Javas Pojos (einfache alte Java -Objekte) in Datensätze in der Datenbank zu kartieren.
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.
Migrierte nach Github im November 2013, MyBatis 'Github-Adresse: https://github.com/mybatis/mybatis-3.
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 Datenzugriffsobjekte (DAO).
Jede MyBatis -Anwendung verwendet hauptsächlich SQLSessionFactory -Instanzen, und eine SQLSessionFactory -Instanz kann durch SQLSessionFactoryBuilder erhalten werden. SQLSessionFactoryBuilder kann aus einer XML -Konfigurationsdatei oder einer Instanz einer vordefinierten Konfigurationsklasse erhalten werden.
1. Generator generieren Sie die DAO -Ebene, die Modellschicht und die Mapper -Ebene automatisch.
MyBatis Generator Download Adresse: http://www.mybatis.org/generator/
MyBatis Generator Chinese Einführung: http://generator.sturgeon.mopaas.com/
Im Folgenden wird das MyBatis-Generator-Core-1.3.2.jar-Plug-In das JDBC-Datenbankverbindungspaket hinzugefügt, um das DAO-Paket für Persistenzschicht, das Modellpaket und das Mapper-Paket automatisch zu exportieren.
Die Java -Pakete, die verwendet werden müssen, sind:
MyBatis-Generator-Core-1.3.2.jar,
MySQL-Connector-Java-5.1.34.jar,
OJDBC14-10.2.0.1.0.jar,
SQLJDBC4-4.0.jar.
Konfigurationsdatei: Generator.xml
<? <!-Konfigurationseigenschaftsdatei wird verwendet, um variable EL-Ausdrücke in die Konfigurationsdatei einzuführen-> <!-Wenn Sie sie in CMD ausführen, sollten Sie den vollständigen Pfad in der URL schreiben, da ClassPath nicht gefunden werden kann. Für Ressourcen-> <!-<properties url = "file: /// d: /workspaces/mybatisgen/bin/generatorconfig.properties"/>-> <!-Datenbank-Treiberpaketpaket-> <!-SQL Server-Daten-Treiberpaket-> <Classpathentry Lace = "D: /javaproject/Generator/generator <!-Oracle Data Triver Paket-> <!-<classpathEntry location = "d: /java/m2/repository/com/oracle/ojdbc14/10.2.0.1.0/ojdbc14-10.2.0.1.0.jar"/> <! location = "d: /javaproject/generator/mysql-connector-java-5.1.34.jar"/>-> <! Die eindeutige Kennung dieses Kontextes. Dieser Wert wird in einigen Fehlermeldungen verwendet. DefaultModeltype: Wird verwendet, um die Richtlinie für generative Modelltypen zu definieren. 1.Konditionelle Standardpolitik, generieren Sie eine Modellklasse für jede Tabelle 2.Flat: Generieren Sie eine Modellklasse aus allen Tabellen. Diese Klasse speichert alle Felder aus den Tabellen 3.Hierarchisch: Wenn die Tabelle einen Primärschlüssel enthält, generiert das Modell eine Primärschlüsselklasse, eine andere Klasse. Dies ist eine angemessene Beziehung zwischen ererbten Klassen. TargetRuntime: Diese Eigenschaft wird verwendet, um den vom Laufzeitziel generierten Code anzugeben. 1.Mybatis3 -Standardwerte generieren Objekte, die mit MyBatis Version 3.0 und später kompatibel sind, sowie JSE 5.0 und später (beispielsweise verwenden Java -Modelle und Mapper -Schnittstellen generische Typen). Die "mit Beispiel" -Methode unterstützt eine nahezu unbegrenzte Dynamik, bei der Klauseln auf diesen generierten Objekten. Darüber hinaus unterstützen Java -Objekte mit diesen Generatoren viele JSE 5.0 -Funktionen, einschließlich parametrisierter Typen und Kommentare. 2.Batis2java2 3.ibatis2java5-> <context id = "mysqltables" targetRuntime = "mybatis3" defaultModeltype = "Conditional"> <! ist falsch Diese Eigenschaft wird verwendet, um anzugeben, ob Kommentare in den generierten Code enthalten sind. Wenn auf True festgelegt wird, wird kein Kommentar generiert. 2. Unterdrückung von Standardeinstellungen zu falsch. Diese Eigenschaft wird verwendet, um festzustellen, ob der generierte Kommentar den Zeitstempel der MBG -Generation enthält. -> <commentgenerator> <Property name = "SuppressAllComents" value = "true" /> < /commentgenerator> <!-Datenbankverbindungs-URL, Benutzername, Passwort-> <!-Mysql Datenbank Link URL, Benutzername, Passwort-> <Jdbcconnection driverclass = "com.mysql.jdbc.dbc.draverer" ConnectionUrl = "JDBC: MySQL: //127.0.0.1: 3310/test" userId = "test" password = "1234"> </jdbcconnection>-> <! ConnectionUrl = "JDBC: Oracle: Thin:@127.0.0.1: 1521: orcl" userId = "testen" password = "1234"> </jdbcconnection>-> <!-SQL Server Database Link URL, Benutzername, Passwort-> <jdbcconnectionction triverclass = "com.microsoft.sqlserver.jdbc.sqlServerdriver" Connectionurl = "JDBC: SQLSERVER: //127.0.0.1: 1433; DatabasName = test" userId = "test" passing = "1234"> </jdbcconnection> <! key = "jdbc.url"> jdbc: h2: tcp: // localhost/test </Eintrag key = "jdbc.url"> jdbc: microsoft: SQLServer: // localhost: 1433; DatenbankaName = [Datenbank] </Eintrag> <Eintrag Key = "jdbc.driver"> com.microsoft.jdbc.sqlServer.sqlServerdriver </ornverdriver </1/> <!-SQLServer2555: key = "jdbc.url"> jdbc: SQLServer: //192.168.0.98: 1433; DatabaseName = [Datenbank] </Eintragung> <Eintrags Key = "jdbc.driver"> com.microsoft.sqlServer.jdbc.sqlverciver </Eintriebs. <entry key="jdbc.url">jdbc:jtds:sqlserver://192.168.0.102:1433/[database];tds=8.0;lastupdatecount=true</entry> <entry key="jdbc.driver">net.sourceforge.jtds.jdbc.Driver</entry> --> <!-- Postgresql <Eintrag key = "jdbc.url"> jdbc: postgresql: // localhost/[database] </Eintrag> <eintrags key = "jdbc.driver"> org.postgresql.driver </Eintrieb>-> <!-Sybase <Eintrag <Eintrag <eintriebs <Eintrag <eintriebs <Eintrag <eintriebs </Eintragung </Eintragung </Eintragung) key = "jdbc.url"> jdbc: sybase: tds: localhost: 5007/[Datenbank] </Eintrag> <Eintragsschlüssel = "jdbc.driver"> com.sybase.jdbc.sybdriver </Eintrag>-> <!-DB2 <Eintrag key = "jdbc.url"> jdbc: db2: // localhost: 5000/[database] </Eintragung> <Eintragsetaste = "jdbc.driver"> com.ibm.db2.jdbc.app.db2Driver </Eintrag>-> <! key = "jdbc.url"> jdbc: hsqldb: mem: generatordb </Eintrag> <eintrags key = "jdbc.driver"> org.hsqldb.jdbcDriver </Eintrag>-> <!-Derby <eintragsschlüssel = "jdbc.urll"> jdbc: DeERBY: // // // // // // // // // // // // // // // ////1/// // // // // ///1/// // // // ///// key = "jdbc.driver"> org.apache.derby.jdbc.clientdriver </Eintrag>-> <!-Java-Typ-Parser Optionaler Konfiguration-> <!-<Javatyperesolver type = ""> Typ-Eigenschaft: Dies kann verwendet werden, um einen von Benutzer vorgesehenen Java-Typ Parser zu spezifizieren. Diese Klasse muss die Schnittstelle org.mybatis.generator.api implementieren. Javatyperesolver, es muss einen öffentlichen Standardkonstruktor geben. Die Eigenschaft kann in diesem Fall standardmäßig spezielle Werte akzeptieren, die Standardimplementierung wird verwendet (der gleiche Effekt gibt den Typ nicht an). Die von diesem Tag unterstützten Eigenschaften: ForceBigDecimals: Standard ist falsch, ob Bigdecimal alle Dezimal- und numerischen Felder darstellt. • Wenn die Skala groß ist und die Länge größer als 18 ist, wird der BigDecimal -Typ verwendet. • Wenn seine Länge von 10 bis 18 beträgt, ersetzt der Java -Parser Java.lang.long. • Wenn die Länge von 5 bis 9 beträgt, wird der Java -Parser durch einen java.lang.Integer ersetzt. • Wenn seine Länge weniger als 5 beträgt, wird der Java -Parser durch java.lang.short ersetzt. -> <Javatyperesolver> <Eigenschaft name = "ForceBigDecimals" value = "false" /> < /javatyperesolver> <!-Erzeugen Sie VO-Objekt-> <!-<JavamodelGenerator> Elemente werden verwendet, um von Java-Modellen generierte Eigenschaften zu definieren. Der Java -Modellgenerator erstellt die Tabelle, die mit der Primärschlüsselklasse, der Aufzeichnungsklasse und der Abfrage -Beispielklasse für Selbstbeobachtung entspricht. Dieses Element ist das erforderliche untergeordnete Element <Context> Element. Unterstützte Eigenschaften: Konstruktorbasiert: Diese Eigenschaft wird verwendet, um auszuwählen, ob der MyBatis -Generator einen Klassenkonstruktor generiert, der jedes Feld in einer Wertklasse akzeptiert. In der Zwischenzeit werden SQL -Ergebniskarten mit Konstruktor anstelle von "Setter" in jedes Feld integriert. Diese Eigenschaft gilt nur für MyBatis3 und wird für Ibatis2 ignoriert. Der Standardwert ist falsch. Unveränderlich: Mit dieser Eigenschaft wird diese Eigenschaft verwendet, um auszuwählen, ob der MyBatis -Generator eine unveränderliche Modellklasse erzeugt. Dies bedeutet, dass die Klasse keine "Setter" -Methode hat und der Konstruktor den Wert jedes Feldes in der Klasse akzeptiert. Standard ist falsch. TrimStrings: Diese Eigenschaft wird verwendet, um auszuwählen, ob der MyBatis -Generator Code zum Abschluss des aus der Datenbank zurückgegebenen leeren Speicherplatzs hinzufügt. Dies ist nützlich, wenn Ihre Datenbank Daten in einem Zeichenfeld anstelle eines VARCHAR -Feldes speichert. Der MyBatis -Generator fügt Code ein, um Zeichenfelder zu schneiden. Der Standardwert ist falsch. -> <!-Generieren Sie den Paketnamen und den Ort der Entitätsklasse. Hier platzieren Generieren Sie das Zuordnungsobjekt für Abfrage-> <!-Erstellen Sie den Paketnamen und den Speicherort der generierten SQL-Karte-Datei. Here, place the generated SQL map file under the package com.ouc.mapping--> <sqlMapGenerator targetPackage="com.ouc.mapping" targetProject="D:/JavaProject/generator/src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- Generate the class file and configuration file of DAO --> <!- <JavaClientGenerator> Elemente sind Attribute, mit denen Java-Client-Codegeneratoren definiert werden. Der Java -Client -Generator wird verwendet, um Java -Schnittstellen und -Klassen so zu erstellen, dass das generierte Java -Modell und die XML -Mapping -Dateien leicht verwendet werden können. Für die Ibatis2 -Zielumgebung übernehmen diese generierten Objekte die Form der DAO -Schnittstellen- und Implementierungsklassen. Für MyBatis verwendet das generierte Objekt eine Mapper -Schnittstelle. Dieses Element ist ein optionales untergeordnetes Element. Wenn Sie dieses Element nicht angeben, generiert der MyBatis -Generator (MBG) keine Java -Client -Schnittstellen und -Kleter. Wo Typattribut Typ: Wenn dargetRuntime myBatis3 xmlmapper ist: Das generierte Objekt wird die Java -Schnittstelle mit der MyBatis 3.x Mapper -Infrastruktur verbinden. Die Schnittstelle hängt von der generierten XML -Mapper -Datei ab. Im Allgemeinen wird dieser XMLMapper verwendet. -> <!-Generieren Sie den Paketnamen und den Ort des DAO. Hier befindet sich die generierte DAO-Klasse unter dem Paket com.ouc.dao-> <JavaClientGenerator type = "xmlmapper" targetPackage = "com.ouc.dao" targetProject = "d:/javaproject/generator/src"> <tabelsname = "tablsubsubpackages" value = ". wird verwendet, um eine Tabelle in der Datenbank auszuwählen. Die ausgewählte Tabelle führt dazu, dass die folgenden Objekte für jede Tabelle generiert werden: • Eine mybatis/ibatis • formatierte SQL -Zuordnungsdatei • Eine Reihe von Klassen, die die Tabelle "Modell" bilden, einschließlich: • Eine Klasse, die übereinstimmt. • Die Felder in der Tabelle stimmen nicht im Primärschlüssel überein, nicht im BLOB -Feld. Diese Klasse erweitert den Primärschlüssel, wenn es einen gibt. • Eine Klasse, um das BLOB -Feld in einer Tabelle zu halten (falls vorhanden). Diese Klasse erweitert die ersten beiden Klassen von einem je nach Tabellenkonfiguration. • Eine Klasse, die verwendet wird, um Dynamik zu erzeugen, wobei Klauseln in unterschiedlichem Beispiel "mit Beispiel" -Methoden (selectByExample, DeleteByExample)). • (optional) DAO -Schnittstelle und Klassen -TableName: Der Name der angegebenen Tabelle muss konfiguriert werden. DomainObjectName: Der grundlegende Name des generierten Javabäe -Objekts. Wenn nicht angegeben, wird MBG automatisch basierend auf dem Tabellennamen generiert. Dieser Name (ob hier angegeben oder automatisch generiert) wird als Domänenklassenname und Name der DAO -Klasse verwendet. EnableInsert: Ob eine Einfügeanweisung generiert werden soll. Die Standardeinstellung true truecselectByprimaryKey: Ob Sie eine Auswahlanweisung über den Primärschlüssel generieren sollen. Unabhängig davon, ob es eine solche Einstellung gibt, wird sie nicht generiert, wenn die Tabelle keinen Primärschlüssel hat. EnableUpdatByprimaryKey: Ob Sie Aktualisierungsanweisungen über den Primärschlüssel generieren möchten. Wenn die Tabelle keinen Primärschlüssel hat, wird die Anweisung nicht generiert, unabhängig davon, ob die Eigenschaft festgelegt ist oder nicht. EnabledSeleteByprimaryKey: Ob Sie eine Löschanweisung über den Primärschlüssel generieren sollen. Wenn die Tabelle keinen Primärschlüssel hat, unabhängig von dieser Eigenschaft wird die Anweisung nicht generiert. aktivierteleteByExample: Ob eine Löschanweisung über das Beispielobjekt generiert werden soll. Diese Erklärung macht viele verschiedene dynamische Deletionen, die zur Laufzeit generiert werden. EnableCountBy Beispiel: Ob generiert werden soll, um die Anzahl der Zeilen über das Beispielobjekt zu berechnen. Diese Anweisung gibt ein Beispiel zurück, das der Anzahl der Zeilen in einer Tabelle entspricht. EnableUpDateByExample: Ob Sie Aktualisierungsanweisungen über das Beispielobjekt generieren. Diese Anweisung aktualisiert einen passenden Datensatz in einer Tabelle. SelectByPrimaryKeyQueryID: Dieser Wert wird der Auswahlliste hinzugefügt, um die Deklaration nach dem Primärschlüssel in dieser Tabelle auszuwählen: "'<wert> als QueryID". Dies kann verwendet werden, um Abfragen im DBA beim Laufzeit -Tracking -Tool zu identifizieren. Wenn Sie verwenden müssen, sollten Sie eine eindeutige ID angeben, um MBG für jede verschiedene Abfrage zu generieren. SelectByExampleQueryID: Dieser Wert wird der Auswahlliste hinzugefügt, um die Anweisung mit dem Beispiel in dieser Tabelle auszuwählen: "'<wert> als queryID". Dies kann verwendet werden, um Abfragen im DBA beim Laufzeit -Tracking -Tool zu identifizieren. Wenn Sie verwenden müssen, sollten Sie eine eindeutige ID angeben, um MBG für jede verschiedene Abfrage zu generieren. enableSelectByExample: Sollte die Auswahlanweisung durch ein Beispiel generiert werden? Diese Erklärung macht viele verschiedene dynamische Abfragen, die zur Laufzeit generiert wurden. Modelltyp: Diese Eigenschaft wird verwendet, um den Standardmodelltyp zu überschreiben, wenn Sie dies für diese Tabelle tun möchten. Wenn nicht angegeben, generiert MBG das Domänenobjekt basierend auf dem Kontext -Standardmodellyp. Dieser Modelltyp definiert, wie die MBG -Domänenklasse generiert wird. Einige Modelltypen MBGs erzeugen für jede Tabelle eine einzelne Domänenklasse, andere können je nach Struktur der Tabelle verschiedene Klassen MBGs erzeugen. Escapewildcards: Wildcards ausschließen. Dies bedeutet, dass sowohl das Schema als auch die Tabellennamen von SQL Wildcards ('_' und ' %') in Suchspalten vermieden werden sollten. Dies sind einige Treiber, die erfordern, dass, wenn das Schema oder die Tabelle eine SQL -Wildcard enthält (beispielsweise, wenn der Name einer Tabelle my_table ist, einige Treiber benötigen, um die Unterstriche zu entkommen). -> <!-Um diese Tabellen zu generieren (TableName und DomainObjectName ändern)-> <table tableName = "v_supplyuser" DomainObjectName = "vSupplyUser" EnableCountByExample = "False" EnableUpDateByExample = "False" ENEDERTELETYEMABLEGEBOTE "FALSABLE" /FALSABLE "-ElablyExmagel" /| tableName = "wj_gatelist" domainObjectname = "wjgatelist" EnableCountByExample = "false" EnableUpdateByExample = "false" enableTELETEBYEMAMPLE = "False" ENGLEECTBYEMABLE = "Falsch" SelectByExamplequeryID = "False"/> </contxt> </generatorBoximators> </generatorsconfiguration> </generators text> </generators -konfiguration> Öffnen Sie die CMD -Befehlszeile, gehen Sie zu der Datei, in der sich die Konfigurationsdatei befindet, und führen Sie die folgende Anweisung Generation aus:
Java -Jar Mybatis -Generator -Core -1.3.2.jar -configfile Generator.xml -overwrite
Nachdem der Befehl ausgeführt wurde, können Sie feststellen, dass das DAO -Paket, das Modellpaket und die Mapper -Paketpaketdateien im entsprechenden Pfad generiert werden.
2.Mybatis Framework -Integration
1) MyBatis verwendet Parameterkonfiguration: sqlmapconfig.xml.
① Cache -Konfiguration (Cache): CacheEnabled: Global Switch: Standard ist wahr. Wenn es als falsch konfiguriert ist, ist es nutzlos, die anderen Mapper -XML -Dateien zur Unterstützung von Cache zu konfigurieren.
② Verzögerung der Belastung:
LazyLoadingNabled: True verwendet Lazy Loading, falsche Deaktivierungen Lazy Loading, Standard ist wahr. Wenn deaktiviert wird, werden alle zugeordneten Objekte sofort geladen.
Wenn aggressiveivalloading: TRUE aktiviert ist, werden beim Aktivieren des faulen Ladens beim Zugriff auf eine faule Objekteigenschaft alle faulen Objekteigenschaften dieses Objekts voll geladen. FALSCH. Wenn Sie Verzögerungen laden, laden Sie die Objekteigenschaften nach Bedarf (dh auf eine faule Objekteigenschaft im Objekt und andere faule Objekteigenschaften im Objekt werden nicht geladen). Standard ist wahr.
③ MultipleresulsetSenabled: Ermöglichen und nicht zulassen, dass eine einzelne Anweisung mehrere Datensätze zurückgibt (abhängig von den Anforderungen an den Treiber). Standard ist wahr.
④ UsecolumnLabel: Verwenden Sie Spaltenbezeichnungen anstelle von Spaltennamen. Unterschiedliche Laufwerke haben unterschiedliche Ansätze. Siehe die Drive -Dokumentation oder testen Sie sie mit diesen beiden verschiedenen Optionen.
⑤ UseGeneratedKeys: Ermöglicht JDBC Primärschlüssel. Der Antriebsunterstützung ist erforderlich. Wenn diese Einstellung auf True gesetzt wird, erzwingt diese Einstellung den generierten Primärschlüssel, einige Laufwerke sind inkompatibel, können jedoch weiterhin ausgeführt werden.
⑥ AutomappingBehavior: Gibt an, ob und wie mybatis die Eigenschaften der Datentabellen und Objekte automatisch abbilden. Teilweise wird nur automatisch einfache, ohne verschachtelte Ergebnisse zugeordnet. Full wird alle komplexen Ergebnisse automatisch zuordnen.
⑦ DefaultExecutortype: Konfiguriert und legt den Executor fest und führt der einfache Ausführungsbranche andere Anweisungen aus. Der Wiederverwechsungsausführende kann erstellte Anweisungen wiederverwenden, und der Stapel -Testamentsvollstrecker kann wiederholte Anweisungen und Batch -Updates ausführen.
⑧ DefaultStatementTimeOut: Legen Sie ein Zeitlimit fest, um festzustellen, wie lange das Laufwerk darauf warten, bis die Datenbank auf Timeout reagiert.
Die vollständige SQLMAPConfig.xml -Konfigurationsdatei lautet wie folgt:
<? /> <Einstellung name = "LazyLoadingEnabled" value = "true" /> <Einstellung Name = "MultipleresulsetSetSETenabled" value = "true" /> <Einstellung Name = "MultipleresulTsetSETenabled" value = "true" /> <Einstellungsname = "usecolumnLabel" value = "true" /> <Seting Name = "Verwendung von" uacing value = "partial" /> <seting name = "defaultExecUtortype" value = "einfache" /> <!-Einfache Wiederverwendung Batch-> <!-<Einstellung Name = "DefaultExecUtortyp" value = "batch" />-> <Einstellungsname = "DefaultStatementTimeOut" Value = " /> <Setting name name = "MAPUNDERSCORETOCAMELCASE" value = "False" /> <Einstellung name = "localcachescope" value = "session" /> <!-<Einstellung name = "jdbctypeFornull" value = "other" />-> <Einstellung Name = "jdbctypeFeNull" NULL " /> < value = "Equals, Clone, HashCode, toString"/> </Einstellungen> <entypealises> <!-Modul-> <typealias alias = "user" type = "com.ouc.mkhl.platform.Authority.model.User"/> <typealias = "rolle". type = "com.ouc.mkhl.platform.Authority.model.role"/> <typealias alias = "Ausrüstung" type = "com.ouc.mkhl.platform.bukteata.model.equipment"/> <typealias alias = "Factory". type = "com.ouc.mkhl.platform.basedata.model.factory"/> </typealiases> <typeHandlers> <typeHandler Handler = "com.ouc.openPlatform.dao.mybatis.SerializAlTypeHandler"/> </TypsHandlers> </> </</</</</</</</</</</</</</</</</</</</</</</</</</</</</<//"
Serialisierung Spezielle Wertverarbeitung: SerializabletypeHandler
Paket com.ouc.openplatform.dao.mybatis; import Java.io.Serializable; Import Java.Sql.Callablestatement; import Java.sql.preparedStatement; importieren java.sql.resultset; org.apache.ibatis.type.JdbcType;/*** @author WuPing*/public class SerializableTypeHandler extends BaseTypeHandler<Serializable> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Serializable parameter, JdbcType jdbcType)throws SQLException oder (Serialisierbar) rs.getObject (columnIndex);}@overridePublic serializable getNullableLesult (callablestatement cs, int columnIndex) löscht sqlexception {return (serialisierbar) cs.getObject (columnIndex);}} 2) Ergebnismap -Ergebnissatz:
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.
Beispiel: UserBaSeresultmap
<resultMap id = "userBaSeresultMap" type = "user"> <id column = "id" property = "id" jdbctype = "varchar" /> <result column = "truename jdbctype = "varchar" /> < /resultMap>
Modellklasse: Benutzer
Paket com.ouc.mkhl.platform.authority.model; import java.io.serializable; // Benutzerinformationen öffentliche Klasse Benutzer implementiert serialisierbar {private statische endgültige long serialversionuid = 1098321123l; private Ganzzahl -ID; // Benutzer -ID private Zeichenfolge Benutzername; // Benutzername private Zeichenfolge Passwort; // Benutzername private Zeichenfolge E -Mail; // E -Mail private Zeichenfolge TrueName; // Richtiger Name privater String Sex; // Gender Private Ganzzahl Alter; // Alter privat String Telefon; // Mobiltelefon public Integer getId () {return id; } public void setId (Integer id) {this.id = id; } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername == null? null: userername.trim (); } public String getPassword () {Kennwort zurückgeben; } public void setPassword (String -Passwort) {this.password = password == null? null: password.trim (); } public String getemail () {E -Mail zurückgeben; } public void setemail (String -E -Mail) {this.email = E -Mail == NULL? NULL: EMAL.TRIM (); } public String getTruename () {return truename; } public void setTruename (String Truename) {this.Truename = Truename == NULL? NULL: Truename.trim (); } public String getSex () {Return Sex; } public void setsex (String sex) {this.sex = sex == null? null: sex.trim (); } public Integer getage () {Return Age; } public void setage (Ganzzahl älter) {this.age = älter; } public String gettelephone () {return telefon; } public void settelephone (String telefon) {this.telephone = telefon == null? NULL: Telefon.trim (); }} 3) Hinzufügen, Löschen, Ändern und Überprüfen:
(1) Abfrage auswählen:
① ID: Auf die eindeutige Kennung in diesem Modus kann durch andere Aussagen verwiesen werden.
② ParameterType: Der vollständige Klassenname oder Alias des Parameters übergeben an diese Anweisung.
③ resultType: Die Anweisung gibt den gesamten Klassennamen oder Alias des Werttyps zurück. Beachten Sie, dass bei einer Sammlung der gesamte Klassenname oder Alias des Elements in der Sammlung hier und nicht der Klassenname der Sammlung selbst ausgefüllt wird. (Ergebnistyp und resultmap können nicht zusammen verwendet werden)
④ resultMap: Der referenzierte externe resultmap -Name. Das Ergebnis -Set -Mapping ist die leistungsstärkste Funktion in MyBatis. Viele komplexe Zuordnungen können leicht gelöst werden. (Ergebnistyp und resultmap können nicht zusammen verwendet werden)
⑤ Flushcache: Wenn auf True gesetzt, wird der Cache jedes Mal gelöscht, wenn die Anweisung aufgerufen wird. Die Auswahlanweisung ist standardmäßig auf False festgelegt.
⑥ Uscache: Wenn auf TRUE eingestellt wird, wird der Ergebnissatz der Anweisung zwischengespeichert. Die Auswahlanweisung ist standardmäßig auf False festgelegt.
⑦ Timeout: Stellen Sie die maximale Zeit ein, die das Laufwerk auf eine Antwort wartet, bevor Sie eine Ausnahme auswerfen. Die Standardeinstellung besteht darin, den Wert nicht festzulegen, und das Laufwerk entscheidet ihn selbst.
Beispiel: Abfragen Sie alle Benutzerinformationen: SelectUsers
<select id = "selectUsers" resultmap = "userBaSeresultmap"> ID, Benutzername, E -Mail von Benutzer </select>
(2) Einfügen einfügen: SaveUser
Hier verwendet die Datenbanktabelle den Primärschlüssel, um sich selbst zu erhöhen, und der Primärschlüssel ist ID.
① Fetchsize: Nach dem Einstellen eines Wertes wird das Laufwerk erregt, dass die Anzahl der Ergebnissätze diesen Wert erreicht hat. Der Standard wird nicht festgelegt, was vom Laufwerk selbst bestimmt wird.
② Erklärung: Erklärung, vorbereitete Erklärung, Callablestatement. Vorbereitete Aussagen, Callable -Aussagen.
③ uwgeneratedKeys: Verwenden Sie die GetGeneratedKeys -Methode von JDBC, um den von der Datenbank selbst generierten Primärschlüssel zu erhalten (MySQL, SQLServer und andere relationale Datenbanken haben Felder, die automatisch generiert werden).
④ KEYPROPERTY: Identifiziert einen von dem Schlüssel zurückgegebenen Wert, der von mybatis in GetGeneratedKeys eingestellt wird, oder verwenden Sie ein SelectKey -Element für die Anweisung Insert.
<einfügen id = "saveUser" parameterType = "user"> in den Benutzer einfügen (Benutzername, Passwort, E -Mail, Truename, Sex, Alter, Telefon) Werte ( #{Benutzername, jdbctype = varchar}, #{password, jdbctype = varchar}, #{E -Mail, jdbctype = varchar}, #{E -Mail, jdbctype = varchar}, #{E -Mail, JDBCTYPE = varchar}, # #{E -Mail, JDBCTYPE = varchar}, JDBCTYPE = varchar}. #{Truename, jdbctype = varchar}, #{sex, jdbctype = varchar}, #{ay, jdbcType = Integer}, #{telefonisch, jdbctype = varchar}) </> (3) Update Update: Dynamisch Aktualisieren von SQL: UpdateUser
<Update id = "updateUser" parameterType = "user"> aktualisieren user <Set> <if test = "userername! #{E -Mail, jdbctype = varchar}, </if> <if test = "truename! #{ay, jdbctype = Integer}, </if> <if test = "telefon! (4) Löschen löschen: DeleteUser
<delete id = "DeleteUser" parameterType = "Integer"> aus Benutzerwheren ID = #{id, jdbcType = Integer} </delete> (5) SQL: Das SQL -Element wird verwendet, um ein wiederverwendbares SQL -Anweisungssegment für andere Anweisungen zu definieren.
<sql id = "userBaseColumnList"> Benutzername, Kennwort, E -Mail, Telefon </SQL> <select id = "getUsers" resultmap = "userBaseSultmap"> SELECT <include refid = "userBaseColumnList"/> von Benutzer </select>
(6) Parameter: Parameter: MyBatis kann grundlegende Datentypen und die komplexen Datentypen von Java verwenden.
Grundlegende Datentypen, Zeichenfolge, int, Datum usw.
Die Verwendung grundlegender Datentypen kann nur einen Parameter liefern, sodass Sie die Java -Entitätsklasse oder den Kartentyp als Parametertyp verwenden müssen. Seine Attribute können direkt über #{} erhalten werden.
① Grundlegende Datentypparameter: String
<select id = "getUserByName" resultType = "user" parameterType = "String"> ID, Benutzername, E -Mail von Benutzerwhere username = #{Benutzername, jdbcType = varchar} </select> Java -Code:
öffentlicher Benutzer getUserByName (String -Name); // Benutzerinformationen basierend auf dem Benutzernamen abrufen
② Java Entity Type Parameter: Benutzer
<einfügen id = "saveUser" parameterType = "user"> in den Benutzer einfügen (Benutzername, Passwort, E -Mail, Truename, Sex, Alter, Telefon) Werte ( #{Benutzername, jdbctype = varchar}, #{password, jdbctype = varchar}, #{E -Mail, jdbctype = varchar}, #{E -Mail, jdbctype = varchar}, #{E -Mail, JDBCTYPE = varchar}, # #{E -Mail, JDBCTYPE = varchar}, JDBCTYPE = varchar}. #{Truename, jdbctype = varchar}, #{sex, jdbctype = varchar}, #{ay, jdbcType = Integer}, #{telefonisch, jdbctype = varchar}) </> Java -Code:
public int SaveUser (Benutzerbenutzer); // Benutzerinformationen einfügen
③ MAP -Parameter: Map <String, Object> recordMap
<select id = "selectChildGrouptotalnum" resultType = "Integer"> Select count (*) aus GroupInfo <trim prefix = "wob Name! #{type, jdbcType = Integer} </if> <if test = "category! = null und kategorie! Java -Code:
// Erhalten Sie die Gesamtzahl der Datensätze in Untergruppen öffentlich int selektlungsgrouptotalnum (MAP <String, Object> RecordMap); Karte <string, object> recordMap = new HashMap <String, Object> (); recordMap.put ("idstr", Group.getChildGroupids (). Split (",")); recordMap.put ("Name", Name); recordMap.put ("Beschreibung", Beschreibung); recordmap.put ("type", -1); GroupDao.SelectChildGrouptotalNum (RecordMap); ④ Mehrere Parameter:
Methode 1: Die Parameter in der Reihenfolge übergeben.
<!-Abfrageparameter basierend auf dem Parameternamen-> <select id = "selectSsensornobySensorname" resultType = "Integer" usecache = "false" flushcache = "true"> sensorno aus sensorConfig wobei Name = #{0} und testunitno = {1 {1} und Labcod = {2 {2 {2 {2} Java -Code:
// Abfragen Sie den Parameter iDPublic Int SELECTSENSORNOBYSENSORNAME (String -Sensorname, int testunitno, String Labcode);
Methode 2: Fügen Sie @Param Annotation zu den Schnittstellenparametern hinzu.
<select id = "selectByUnernameAnDVCode" resultMap = "userBaSeresultMap"> ID, Benutzername aus dem Benutzer <trim prefix = "wob test = "cleanlierno! = null und celentierno!
Java -Code:
// Benutzerinformationen basierend auf Benutzername und V -Code publiclist <Unters> selectByUnernaMeandVCode (@Param ("Benutzername") String -Benutzername,@param ("Lieferierer") String -Supplierer,@param ("startIndex") int startIndex, @param ("pageSize") int pagesizes); 4) Dynamische SQL -Anweisung:
SelectKey -Tag, if Tag, bedingte Beurteilung von if + where, Aktualisieren Sie die Anweisung von if + set, if + trim ersetzt wher/set Tag, Trim ersetzt, wählen Sie (wenn, sonst), für das tag. Dynamische SQL -Aussagen sind der flexibelste Teil von MyBatis, und es ist sehr bequem, sie gut zu verwenden.
Beispiel: selectTotalnumByAccountType
<select id = "selectTotalnumByAccountType" resultType = "Integer"> Select Count (*) vom Benutzer <Trim Prefix = "wob und Benutzername! truename!
Das obige ist eine Zusammenfassung des Verwendungswissens des MyBatis Persistenten Layer -Frameworks, 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!