Einführung in Ibatis:
Ibatis ist ein Open -Source -Projekt von Apache und eine O/R -Mapping -Lösung. Das größte Merkmal von Ibatis ist, dass es kompakt und schnell loslegen kann. Wenn Sie nicht zu viele komplexe Funktionen benötigen, ist Ibatis die einfachste Lösung, die Ihre Anforderungen entsprechen und flexibel genug ist. Jetzt wurde Ibatis in MyBatis umbenannt.
Die offizielle Website lautet: http://www.mybatis.org/
1. Der Eingabeparameter ist ein einzelner Wert
<delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" parameterClass="long"> delete from MemberAccessLog where accessTimestamp = #value# </delete> <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" parameterClass="long"> delete from MemberAccessLog where AccessTimestamp = # Wert # </delete>
2. Der Eingabeparameter ist ein Objekt
<einfügen id = "com.fashionfree.stat.accesslog.MemberAccessLog.insert" Parameterclass = "com.fashionfree.stat.accesslog.model #AccessLogid #, #memberID #, #clientip #, #httpMethod #, #actionId #, #Requesturl #, accessTimestamp #, #extend1 #, #extend2 #, #extend3 #) </Insert id = "com.fashionfree.stat.accessog.memberlog.insert.insert" parameterclass = "com.fashionfree.stat.accesslog.model.MemberAccessLog> In memberAccessLog (AccessLogid, Mitgliedsmitglied, Clientip, httpMethod, actionId, Requesturl, AccessTimestamp, Extend1, Extend3) Werte (accesslogid # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #, #member) einfügen. #Requesturl #, #AccessTimestamp #, #extend1 #, #extend2 #, #extend3 #) </einfügen>
3. Der Eingangsparameter ist ein java.util.hashmap
<select id = "com.fashionfree.stat.accesslog id = "com.fashionfree.stat.accesslog.SelectActionIdActactionNumber" Parameterclass = "HashMap" resultmap = "getActActionItactionNumber"> ActionId, Count (*) als zählte von memberAccesslog wob
4. Die Eingabeparameter enthalten Arrays
<einfügen id = "updateStatusBatch" parameterclass = "HashMap"> Aktualisierung des Fragensatzes Status = # Status # <Dynamic Prepend = "wobei Fragen in"> <isnotnull Properation = "actionIds"> <iterate Eigenschaft = "actionIds" open = "(" close = ")" conjunction <einfügen id = "updateStatusBatch" parameterclass = "HashMap"> Aktualisierung des Fragensatzes Status = # Status # <Dynamic Prepend = "wobei Fragen in"> <isnotnull Properation = "actionIds"> <iterate Eigenschaft = "actionIds" open = "(" close = ")" conjunctionBeschreibung: ActionIds ist der Name des übergebenen Arrays; Verwenden Sie dynamisches Tag, um SQL -Anweisungssyntaxfehler zu vermeiden, wenn das Array leer ist. Verwenden Sie das iSnotnull -Tag, um Ibatis -Parsenfehler zu vermeiden, wenn das Array null ist
5. Die Übergabe der Parameter enthält nur ein Array
<select id = "com.fashionfree.stat.accesslog.model.statMemberAction.SelectActionIfModule" resultClass = "HashMap"> moduleid, actionId aus StatMemberAction <Dynamic Prepend = "wobei moduleid in"> <iterate open </select> <select id = "com.fashionfree.stat.accesslog.model.statMemberAction.SelectActionIdsofModule" resultClass = " ModulId </select>
HINWEIS: Beachten Sie, dass im Tag -Tag kein Parameterklassenelement vorhanden ist
Außerdem: Sie können das Array auch hier in einen HashMap einfügen, aber es fügt zusätzlichen Overhead hinzu und wird nicht empfohlen, es zu verwenden.
6. Lassen Sie Ibatis die Parameter direkt in Zeichenfolgen analysieren
<select id = "com.fashionfree.stat.accesslog id = "com.fashionfree.stat.accesslog
Hinweis: Bei Verwendung dieser Methode besteht das Risiko einer SQL -Injektion, und es wird nicht empfohlen, sie zu verwenden.
7. PAGEDQUEY
<select id = "com.fashionfree.stat.accesslog id="com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count" parameterClass="hashMap" resultClass="int"> <include refid="countSql"/> <include refid="whereSql"/> </select> <sql id="selectAllSql"> select accessLogId, memberId, clientIP, httpMethod, actionId, requestURL, accessTimestamp, extend1, extend2, extend3 from MemberAccessLog </sql> <sql id="whereSql"> accessTimestamp <= #accessTimestamp# </sql> <sql id="countSql"> select count(*) from MemberAccessLog </sql> <sql id="countSql"> select count(*) from MemberAccessLog </sql> <sql id = "wheresql"> accessTimestamp <= accessalTimestamp # </sql> <sql id = "countSQL"> Auswahlzahl (*) von memberAccessLog </sql> <sql id = "Pagesql"> <dynamicic> <isnotnull Property = "> <snotnull. # startIndex #, # pageSize # </isnotnull> </isnotnull> </dynamic> </sql> <select id = "com.fashionfree refID = "whersql"/> <include refID = "pagesql"/> </select> <select id = "com.fashionfree.stat.accessLog.SelectMemberAccessLogby.Count" Parameterclass = "Hashmap" resultClass = "intellig" <select = "/select =" <seleclas/> <includewith = "<Sclupt. id = "selectAllSQL"> AccessLogid, memberId, clientip, httpMethod, actionId, RequestUrl, AccessTimestamp, Extend1, Extend3 aus memberAccessLog </SQL> <SQL ID = "WHERESQL"> AccessTimestAMP <= accessMestamp # accessTamp # </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql> </sql). MemberAccesslog </sql> <sql id = "pagesql"> <dynamic> <isnotnull Property = "startIndex"> <isnotnull Properation = "pageSize"> limit # startIndex #, # PageSize # </isnotnull> </isnotnull> </dynamic> </sql>
Hinweis: In diesem Beispiel sollte der Code sein:
HashMap HashMap = new HashMap (); Hashmap.put ("AccessTimestamp", irgendein Wert); PAGEDQUEY ("com.fashionfree.stat.accesslog.SelectMemberAccessLogby", HashMap);Die PageDQuery -Methode sucht erstmals nach einer zugeordneten Erklärung namens com.fashionfree.stat.accesslog.SelectmemberAccesslogby.count, um SQL -Abfrage durchzuführen, wodurch die Anzahl der Datensätze von Com.Fashionfree.stat.Accesslog.SelectMemberAccesslogby Query ausgeführt und dann die erforderlichen SQL -Query -Query durchgeführt wird, und die geforderte SQL -Query -Query durchführen, und die erforderlichen SQL -Query -Query -Query durchführen, und die geforderte SQL Query ausführen (com.fashionfree.stat.accesslog.SelectMemberAccessLogby). Für den spezifischen Prozess finden Sie in der utils -Klasse auf den entsprechenden Code.
8. Die SQL -Anweisung enthält größer als das Vorzeichen> und weniger als das Vorzeichen <1. Schreiben Sie das größere als das Zeichen und weniger als das Zeichen als:> <zum Beispiel:
<delete id = "com.fashionfree.stat.accesslog.deletememberAccessLogSbefore" Parameterclass = "Long"> Löschen von memberAccesslog wob MemberAccesslog wobei AccessTimestamp <= # Wert # </delete>
Setzen Sie Sonderzeichen im CDATA -Bereich von XML an:
<delete id = "com.fashionfree.stat.accesslog.deletememberAccessLogSbefore" Parameterclass = "Long"> <! [CDATA [löschen von membersAccesslog wob <! [CDATA [Löschen von memberAccesslog, wobei AccessTimestamp <= # value #]] </delete>
Es wird empfohlen, die erste Methode zu verwenden, sie als <und> zu schreiben (XML analysiert den Inhalt in CDATA nicht. Wenn die CDATA dynamische Tags enthält, funktioniert es nicht).
9. Include und SQL -Tags organisieren gemeinsame SQL -Anweisungen zusammen, um eine einfache Freigabe zu erzielen:
<sql id = "selectBasicsql"> SELECT SampleTimestAMP, Onlineum, Jahr, Monat, Woche, Tag, Stunde von OnlinememberNum </sql> <sql id = "whoderesqlbefore"> WO SampleTimestamp <= # SAMPLINGTIMESTAMP # </sql> <select timestamp # </sql> < id = "com.fashionfree.accesslog Sampingtimestamp, Onlineum, Jahr, Monat, Woche, Tag, Stunde von Onlinemembernum </sql> <sql id = "wwersqlbefore"> wobei Sampingtimestamp <= # SampleTimestamp # </sql> <select id = "com.fmodien.accessMesslog parameterclass = "HashMap" resultClass = "OnLinememberNum"> <include refID = "selectBasicsql" /> <include refID = "whersqlbefore" /> < /select>
Hinweis: SQL -Tags können nur als Referenz verwendet werden und können nicht als zugeordnete Anweisungen angesehen werden. Wie im obigen Beispiel gibt es ein SQL -Element mit dem Namen SelectBasicsql, und es ist falsch zu versuchen, es als SQL -Anweisung zur Ausführung zu verwenden:
sqlmapclient.queryForList ("selectBasicsql"); ×10. Wählen Sie zufällig Datensätze aus
<sql id = ”randomsql”> order nach rand () limit # nummer # </sql>
Wählen Sie zufällig Zahlendatensätze aus der Datenbank (nur für MySQL) aus (nur für MySQL)
11. Stichfelder in der SQL Group durch Gruppierung
<sql id=”selectGroupBy> SELECT a.answererCategoryId, a.answererId, a.answererName, a.questionCategoryId, a.score, a.answeredNum, a.correctNum, a.answerSeconds, a.createdTimestamp, a.lastQuestionApprovedTimestamp, a.lastModified, GROUP_CONCAT(q.categoryName) as categoryName FROM AnswerCategory A, Fragekategorie Q wob A.Antr.
Hinweis: Die Funktion von Mysql wird in SQL verwendet
12. Sortieren Sie in der Reihenfolge in in
①mysql:
<sql id=”groupByInArea”> select moduleId, moduleName, status, lastModifierId, lastModifiedName, lastModified from StatModule where moduleId in (3, 5, 1) order by instr(',3,5,1,' , ','+ltrim(moduleId)+',') </sql> <sql id=”groupByInArea”> select moduleId, ModulenName, Status, LastModifierId, LastModifiedName, LastModified von StatModule wobei Moduleid in (3, 5, 1) durch Instrument (', 3,5,1,', ','+Ltrim (Moduleid)+',') </sql> ordnen.②SQLServer:
<sql id = ”GroupByInarea”> Wählen Sie ModulId, ModulenName, Status, LastModifierid, LastModifiedName, LastModified aus StatModule wobei Moduleid in (3, 5, 1) Order durch Charindex (','+ltrim (ModulId)+',', 3,5,1, ') </SQL> <SQL Id =', 3,5,1, ') </SQL> <SQL =', ', 3,5,1,') </SQL> <SQL = ',', ') </SQL> <SQL =', ', 3,5,1,'); ModulId, ModulenName, Status, LastModifierId, LastModifiedName, LastModified aus StatModule wobei Moduleid in (3, 5, 1) durch Charindex (','+ltrim (Moduleid)+',', ', 3,5,1,') </sql> </sql> ',', 3,5,1, ') </sql>', ',', 3,5, ') </sql>Beschreibung: Die Abfragergebnisse werden in der Reihenfolge von ModulId in der Liste (3, 5, 1) zurückgegeben.
MySQL: Instrument (str, substr)
SQLSERVER: Charindex (Substr, Str) gibt die erste Vorkommen der Substring in der String -STRTRIM (STR) zurück
13.
<resultMap id = "getActionItActionNumber"> <resultal = "actionId" Property = "actionId" jdbctype = "Bigint" javatype = "long"/> <resultal column = "count" Properation = "count" jdbctype = "int" javatype column = "actionID" Property = "actionId" jdbctype = "bigint" javatype = "long"/> <resultal column = "count" property = "count" jdbctype = "int" javatype = "int"/> </resultmap>
Die Verwendung von resultMap wird als explizite Ergebniszuordnung bezeichnet, die der Ergebnisklasse (Inline -Ergebniszuordnung) entspricht. Der größte Vorteil der Verwendung von Ergebnisklasse besteht darin, dass sie einfach und bequem ist. Es ist nicht erforderlich, dass das angegebene Ergebnis angezeigt wird. Ibatis bestimmt die Entscheidung auf der Grundlage der Reflexion. resultMap kann eine strengere Konfigurationsauthentifizierung liefern, indem JDBCType und Javatype angegeben werden.
14.Typealias
<typealias alias = "memberOnLineduration" type = "com.fashionfree.stat.accesslog.model.MemberOnLineduration" /> <ypealias>
Ermöglichen Sie, Alias zu definieren, um wiederholte Eingaben übermäßig langer Namen zu vermeiden
15.Remap
<select id = "testforremap" parameterClass = "HashMap" resultClass = "HashMap" RemapResults = "true"> userId <isequal Properation = "tag" compareValue = "1">, Benutzername </isqual> <isequal Propertation = "Tag" select. id = "testforremap" parameterclass = "
In diesem Beispiel werden unterschiedliche Ergebnissätze gemäß dem Wert des Parameter -Tags erhalten. Wenn es kein RemapResults = "True" -attribut gibt, wird Ibatis das Ergebnis während der ersten Abfrage zwischenspeichert. Das Ergebnis -Set -Mapping wird nicht beim nächsten Mal durchgeführt (es muss noch im Vorgang sein), aber das zwischengespeicherte Ergebnissatz wird verwendet.
Wenn im obigen Beispiel RemapResult die Standard -Falscheigenschaft ist und ein Programm wie folgt geschrieben wird:
HashMap <String, Integer> HashMap = New HashMap <String, Integer> (); HashMap.put ("Tag", 1); sqlclient.queryforList ("testforremap", HashMap); HashMap.put ("Tag", 2); sqlclient.queryforList ("testforremap", HashMap); Java -Code
HashMap <String, Integer> HashMap = New HashMap <String, Integer> (); HashMap.put ("Tag", 1); sqlclient.queryforList ("testforremap", HashMap); HashMap.put ("Tag", 2); sqlclient.queryforList ("testforremap", HashMap);Das Programm meldet einen Fehler bei der Ausführung der letzten Abfrageabfrage. Der Grund dafür ist, dass Ibatis den Ergebnissatz der ersten Abfrage verwendet, und die Ergebnissätze der ersten und letzten beiden Male sind unterschiedlich: (BenutzerID, Benutzername) und (userID, Benutzerpassword), was zu einem Fehler führt. Wenn die Eigenschaft remapResults = "True" verwendet wird, führt Ibatis jedes Mal, wenn die Abfrage ausgeführt wird, das Ergebnis -Set -Mapping durch, wodurch Fehler vermieden werden (es wird viel Aufwand geben).
16. Das vorbereitende Attribut des dynamischen Tags wird als Präfix zum Ergebnisinhalt hinzugefügt. Wenn der Ergebnisinhalt des Etiketts leer ist, funktioniert das Vorbereitungsattribut nicht.
Wenn das vorbereitende Attribut im dynamischen Tag vorhanden ist, wird das erste Vorbereitungsattribut seiner verschachtelten Untertitel ignoriert. Zum Beispiel:
<sql id = "whersql"> <dynamic prepend = "wob id = "wheresql"> <dynamic prepend = "wob
In diesem Beispiel enthält das dynamische Tag zwei Sub-Label <snotnull> und <SnotEmpty>. Nach den oben beschriebenen Prinzipien, wenn das falsche Attribut prepend = "Bogus" nicht im <Isnotnull> -Tag steht, um die Dynamik zu entfernen, und das und im <isnotEmpty> -Tag wird ignoriert, was SQL -Syntaxfehler verursacht.
Hinweis: Wenn ein dynamisches Tag kein Vorbereitungsattribut hat, wird das erste Vorbereitungsattribut seines untergeordneten Tags nicht automatisch ignoriert.
Die oben genannten sind 16 SQL -Aussagen, mit denen Ibatis Ihnen vorgestellt wird. 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!