Dynamische SQL-Anweisungsanalyse in Mybatis

Dynamische SQL-Anweisungsanalyse in Mybatis

Dieser Artikel stellt hauptsächlich die dynamische SQL-Anweisungsanalyse in Mybatis vor. Der Beispielcode in diesem Artikel ist sehr detailliert und hat einen gewissen Referenzwert für jedermanns Studium oder Arbeit. Freunde in Not können darauf zurückgreifen.

Es gibt zwei Möglichkeiten, SQL in Mybatis zu konfigurieren: eine ist die Verwendung von XML und die andere die Verwendung von Anmerkungen.

Mybatis verwendet Anmerkungen zum Konfigurieren von SQL, wird jedoch aufgrund der eingeschränkten Konfigurationsmöglichkeiten und der schlechten Lesbarkeit bei komplexem SQL selten eingesetzt.

Mybatis verwendet häufig die XML-Konfigurationsmethode. Mit einigen einfachen XML-Elementen kann es die Funktion von dynamischem SQL erfüllen. Im Mapping-XML von Mybatis können viele Urteile konfiguriert werden, um viele Funktionen zu erreichen, deren Implementierung viel Code erfordert, was die Codemenge erheblich reduziert und die Flexibilität, hohe Konfigurierbarkeit und Wartbarkeit von Mybatis widerspiegelt.

Element Wirkung Bemerkung
Wenn Entscheidungserklärung Einzelne bedingte Zweigbeurteilung
wählen (wann, andernfalls) Entspricht Switch- und Case-Anweisungen in Java Mehrfache bedingte Verzweigungsbeurteilung
trimmen Hilfselemente zur Behandlung spezifischer SQL-Assembly-Probleme Wird zur Behandlung von SQL-Assemblyproblemen verwendet
für jedes Schleifenanweisungen Wird häufig in Listenbedingungen wie Anweisungen verwendet.

Das if-Element

Das if-Element ist die am häufigsten verwendete Beurteilungsanweisung, die der if-Anweisung in Java entspricht. Es wird häufig in Verbindung mit dem Testattribut verwendet.

<select id="findRole1" parameterType="string" resultMap="roleResultMap">
    Wählen Sie role_no, role_name, note aus t_role, wobei 1=1
    <if test="Rollenname != null und Rollenname !=''">
      und Rollenname wie concat('%', #{roleName}, '%')
    </if>
  </Auswählen>

Wenn der Parameter roleName an den Mapper übergeben wird und der Parameter nicht leer ist, wird eine Fuzzy-Abfrage für roleName erstellt, andernfalls wird diese Bedingung nicht erstellt. Das if-Element von Mybaties erspart viel Arbeit beim Einfügen von SQL und verwaltet es in XML.

wählen, wann, sonst Elemente

Wenn bei der Beurteilung mehrere Optionen zur Verfügung stehen und nicht nur zwei, handelt es sich um eine Anweisung ähnlich der Funktion switch...case...default.... Verwenden Sie in der zugeordneten SQL-Anweisung die Elemente „choose“, „when“ und „sonst“, um diese Funktion auszuführen.

<select id="findRole2" parameterType="Rolle" resultMap="Rollen-ResultMap">
    Wählen Sie role_no, role_name, note aus t_role
    wobei 1 = 1
    <wählen>
      <wenn test="roleNo != null und roleNo !=''">
        UND Rollennr. = #{Rollennr.}
      </wann>
      <wenn test="Rollenname != null und Rollenname !=''">
        UND Rollenname wie concat('%', #{roleName}, '%')
      </wann>
      <sonst>
        UND Hinweis ist nicht null
      </sonst>
    </wählen>
  </Auswählen>

Das obige Szenario ist:

Erstens: Wenn die Rollennummer nicht leer ist, wird nur die Rollennummer als Abfragebedingung verwendet.

Wenn die Rollennummer leer ist, der Rollenname jedoch nicht leer ist, wird der Rollenname als Bedingung für die unscharfe Suche verwendet.

Wenn sowohl die Rollennummer als auch die Rollennummer leer sind, darf die Rollennotiz nicht leer sein.

trimmen, wo, Elemente festlegen

Das Hinzufügen von „1=1“ zur vorherigen SQL-Anweisung kann seine Funktion erfüllen, es gibt jedoch eine bessere Implementierung, nämlich die Verwendung von „where“. Wenn die Bedingung im Where-Element erfüllt ist, wird das Where-SQL-Schlüsselwort zum zusammengestellten SQL hinzugefügt, andernfalls wird es nicht hinzugefügt.

<select id="findRole3" parameterType="Rolle" resultMap="Rollen-ResultMap">
    Wählen Sie role_no, role_name, note aus t_role
    <wo>
      <if test="Rollenname != null und Rollenname !=''">
        und Rollenname wie concat('%', #{roleName}, '%')
      </if>
      <if test="Hinweis != null und Hinweis !=''">
        und beachten Sie wie concat('%', #{note}, '%')
      </if>
    </wo>
  </Auswählen>

Manchmal müssen Sie spezielle SQL-Syntax entfernen, beispielsweise das allgemeine „und“, „oder“ usw. Auch durch den Einsatz des Zierelements erzielen Sie den gewünschten Effekt. „Prefix“ stellt das Präfix der Anweisung dar und „prefixOverrides“ gibt an, welche Zeichenfolge entfernt werden muss. Es entspricht der vorherigen Where-Anweisung.

<select id="findRole4" parameterType="string" resultMap="roleResultMap">
    Wählen Sie role_no, role_name, note aus t_role
    <trim prefix="wo" prefixOverrides="und">
      <if test="Rollenname != null und Rollenname !=''">
        und Rollenname wie concat('%', #{roleName}, '%')
      </if>
    </trimmen>
  </Auswählen>

Wenn Sie im Ruhezustand aufgrund der Aktualisierung eines bestimmten Felds alle Felder an das persistente Objekt senden müssen, beeinträchtigt dies die Ausführungseffizienz der SQL-Anweisung. Der beste Ansatz besteht darin, den Primärschlüssel und die Aktualisierungsfeldwerte zur Aktualisierung an SQL zu übergeben. Diese Funktion kann durch das Set-Element erreicht werden. Wenn ein festgelegtes Element auf ein Komma stößt, wird das entsprechende Komma automatisch entfernt.

<update id="updateRole" parameterType="Rolle">
    t_role aktualisieren
    <Satz>
      <if test="Rollenname != null und Rollenname !=''">
        Rollenname = #{Rollenname},
      </if>
      <if test="Hinweis != null und Hinweis != ''">
        Notiz = #{Notiz}
      </if>
    </Satz>
    wobei role_no = #{roleNo}
  </Aktualisieren>

foreach-Element

Das foreach-Element ist eine Schleifenanweisung, die zum Durchlaufen der Sammlung verwendet wird. Es kann Arrays und Sammlungen von List- und Set-Schnittstellen gut unterstützen und stellt Durchlauffunktionen für diese bereit. Es wird häufig für das Schlüsselwort in in SQL verwendet.

<select id="findRoleByNums" resultMap="roleResultMap">
    Wählen Sie role_no, role_name, note from t_role where role_no in
    <foreach item="Rollennr" index="index" collection="Rollennr.Liste"
      öffnen="(" Trennzeichen=""," schließen=")">
      #{Rollennummer}
    </foreach>
  </Auswählen>

Die roleNoList der Sammlungskonfiguration ist der Name des übergebenen Parameters, der ein Array, eine Liste, ein Set oder eine andere Sammlung sein kann.

Element konfiguriert das aktuelle Element in der Schleife.

Der Index konfiguriert die Position des aktuellen Elements in der Sammlung.

Durch Öffnen und Schließen können Sie konfigurieren, welche Symbole zum Verpacken dieser Sammlungselemente verwendet werden.

Separator ist das Trennzeichen zwischen Elementen.

Verwenden Sie das Testattribut, um die Zeichenfolge zu bestimmen

Test wird für bedingte Beurteilungsaussagen verwendet, was der Beurteilung von wahr oder falsch entspricht. In den meisten Szenarien wird es hauptsächlich verwendet, um zu beurteilen, ob etwas leer ist oder nicht.

  <select id="getRoleTest" parameterType="string" resultMap="roleResultMap">
    Wählen Sie role_no, role_name, note aus t_role
    <wenn test="Typ == 'Y'.toString()">
      wobei 1 = 1
    </if>
  </Auswählen>

Wenn type='Y' an SQL übergeben wird, kann Mybatis die Bedingung hinzufügen, dass 1=1 ist. Für die Zeichenfolgenbeurteilung kann daher die Methode toString() zum Vergleich hinzugefügt werden.

Das Bind-Element

Das Bind-Element wird verwendet, um eine Kontextvariable über einen OGNL-Ausdruck zu definieren, was bequemer zu verwenden ist.

Beispielsweise wird bei Fuzzy-Abfragen, wenn es sich um eine MySQL-Datenbank handelt, häufig Concat verwendet, das die Parameter mit % verbindet. In der Oracle-Datenbank gibt es so etwas jedoch nicht. Das in der Oracle-Datenbank verwendete Verbindungssymbol ist „||“, daher benötigt SQL zwei Formen, um es zu implementieren. Durch die Verwendung des Bind-Elements ist es nicht erforderlich, die Datenbanksprache zu verwenden.

  <select id="findRole5" parameterType="string" resultMap="roleResultMap">
    <bind name="Muster" Wert="'%' + _parameter + '%'" />
    SELECT role_no, role_name, note FROM t_role
    wobei role_name wie #{pattern} ist.
  </Auswählen>

Das Obige ist meine Zusammenfassung allgemeiner Wissenspunkte zu dynamischen SQL-Anweisungen in Mybatis während des Lernprozesses. Ich hoffe, dass jeder gemeinsam lernen und sich verbessern kann!

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung von dynamischem SQL in Mybatis (gut)
  • Erklärung der Map-Parameter von Mybatis Dynamic SQL
  • MyBatis führt dynamisches SQL aus
  • Verwendung der Mybatis-Fuzzy-Abfrage und der dynamischen SQL-Anweisung
  • So verwenden Sie Trim-Tags in dynamischem SQL von MyBatis
  • MyBatis übt dynamisches SQL und zugehörige Abfragen
  • Detailliertes Beispiel zur Verwendung von MyBatis Dynamic SQL-Tags
  • Anweisungen zur Verwendung des if-Tests in Mybatis Dynamic SQL
  • Detaillierte Erklärung von Mybatis Dynamic SQL
  • Mybatis – superleistungsstarke dynamische SQL-Anweisungssammlung

<<:  So kompilieren Sie den Linux-Kernel

>>:  JavaScript-Grundlagen: Fehlererfassungsmechanismus

Artikel empfehlen

JavaScript implementiert die H5-Goldmünzenfunktion (Beispielcode)

Heute habe ich eine Aktivität für einen roten Ums...

Bild-Tag für HTML-Webseite

Bild-Tag <IMG> einfügen Die farbenfrohen Web...

Xhtml-Sonderzeichensammlung

Name des Autors: &#160; no-break space = gesc...

JS implementiert Karussell mit mehreren Tabs

Karussell-Animationen können das Erscheinungsbild...

Wofür wird jQuery verwendet? jQuery ist eigentlich ein js-Framework

Einführung in jQuery Die jQuery-Bibliothek kann e...

Neue Einstellungen für Text und Schriftarten in CSS3

Textschatten Textschatten: horizontaler Versatz, ...

Detaillierte Erklärung von react setState

Inhaltsverzeichnis Ist setState synchron oder asy...

Unabhängige Implementierung der Nginx-Containerkonfigurationsdatei

Erstellen eines Containers [root@server1 ~]# dock...