Inhaltsverzeichnis
Präfix: Fügen Sie der gespleißten SQL-Anweisung ein Präfix hinzu. " >Wenn die in den Attributen prefixOverrides oder suffixOverrides angegebenen Werte vor oder nach der Anweisung gefunden werden, löscht MyBatis sie automatisch. Wenn Sie mehrere Werte angeben, vergessen Sie nicht, nach jedem Wert ein Leerzeichen einzufügen, um sicherzustellen, dass er nicht mit nachfolgendem SQL verbunden wird. Präfix: Fügen Sie der gespleißten SQL-Anweisung ein Präfix hinzu.
suffixOverrides: Wenn suffixOverrides nach dem Splice auftritt ​​SQL-Anweisung, MyBatis löscht sie automatisch. " >prefixOverrides strong>: Splice Wenn prefixOverrides vor der SQL-Anweisung auftritt, löscht MyBatis sie automatisch. suffixOverrides: Wenn suffixOverrides nach dem Splice auftritt ​​SQL-Anweisung, MyBatis löscht sie automatisch.
Heim Datenbank SQL Lernen Sie das dynamische SQL von MyBatis

Lernen Sie das dynamische SQL von MyBatis

Dec 09, 2020 pm 05:46 PM
mybatis sql

SQL-TutorialEinführung in die leistungsstarken Funktionen von SQL MyBatis SQL

Lernen Sie das dynamische SQL von MyBatis

Empfohlen (kostenlos): SQL-Tutorial

Dynamisches SQL

Eine der leistungsstarken Funktionen von MyBatis ist das dynamische SQL. Wenn Sie Erfahrung mit JDBC oder anderen ähnlichen Frameworks haben, werden Sie verstehen, wie schwierig es ist, SQL-Anweisungen basierend auf unterschiedlichen Bedingungen zusammenzufügen. Vergessen Sie beispielsweise beim Zusammenfügen nicht, die erforderlichen Leerzeichen einzufügen, und achten Sie darauf, das Komma aus dem letzten Spaltennamen in der Liste zu entfernen. Nutzen Sie die dynamische SQL-Funktion, um dieses Problem vollständig zu beseitigen.

Obwohl es in der Vergangenheit nicht einfach war, dynamisches SQL zu verwenden, hat MyBatis diese Situation durch die Bereitstellung einer leistungsstarken dynamischen SQL-Sprache verbessert, die in jeder SQL-Zuordnungsanweisung verwendet werden kann.

Dynamische SQL-Elemente ähneln JSTL- oder XML-basierten Textprozessoren. In früheren Versionen von MyBatis gab es viele Elemente, deren Verständnis einige Zeit in Anspruch nahm. MyBatis 3 hat die Elementtypen stark vereinfacht. Jetzt müssen Sie nur noch die Hälfte der ursprünglichen Elemente erlernen. MyBatis verwendet leistungsstarke OGNL-basierte Ausdrücke, um die meisten anderen Elemente zu eliminieren.

Vorbereitung: Erstellen Sie zuerst die Benutzer-Entitätsklasse ee

Wenn der if-Tag-Test wahr ist, werden die SQL-Anweisungen im if-Tag gespleißt.

Wenn Benutzername, Benutzer-E-Mail und Benutzerstadt nicht leer sind, wird die SQL wie unten gezeigt gespleißt

public class User {
    private Integer id;
    private String username;
    private String userEmail;
    private String userCity;
    private Integer age;}
Nach dem Login kopieren
Wenn nur Benutzername nicht leer ist, wird die SQL wie unten gezeigt gespleißt

CREATE TABLE user (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(255) DEFAULT NULL,
    user_email varchar(255) DEFAULT NULL,
    user_city varchar(255) DEFAULT NULL,
    age int(11) DEFAULT NULL,
  PRIMARY KEY (id))
Nach dem Login kopieren
Aber es gibt Ein Problem mit dieser Methode. Nachteil: Angenommen, der Benutzername ist zu diesem Zeitpunkt leer, weder userEmail noch userCity sind leer.

Lassen Sie uns den dynamischen SQL-Code analysieren. Dem Benutzernamen ist kein Wert zugewiesen, d ​Dynamic SQL sieht so aus:

public List<User> findByUser(User user);
Nach dem Login kopieren
where folgt direkt und, was ein offensichtlicher grammatikalischer Fehler ist. Zu diesem Zeitpunkt sollten und direkt auf where folgen gelöscht. Um dieses Problem zu lösen, können Sie das Tag where verwenden.

where

Ändern Sie die obige SQL wie folgt:

<select id="findByUser" resultType="com.example.mybatis.entity.User">
    select
    id, username, user_email userEmail, user_city userCity, age
    from user
    where    <if test="username != null and username != &#39;&#39;">
        username = #{username}    </if>
    <if test="userEmail != null and userEmail != &#39;&#39;">
        and user_email = #{userEmail}    </if>
    <if test="userCity != null and userCity != &#39;&#39;">
        and user_city = #{userCity}    </if></select>
Nach dem Login kopieren
Wenn das if-Tag im where-Tag die Bedingungen erfüllt, dann where Das -Tag wird in eine where-Anweisung gespleißt. Wenn das mit dem <code>if-Tag gespleißte SQL eine and-Anweisung am Anfang hat, wird das and gelöscht. Mit dieser Methode werden unnötige Schlüsselwörter in SQL automatisch gelöscht, also im Allgemeinen, wenn Tags und Where-Tags in Kombination verwendet werden.

trim

where后面的and删掉。为了解决这个问题,可以使用where标签。

where

将上面的SQL改成如下所示

select id, username, user_email userEmail, user_city userCity, age 
from user where username = ? and user_email = ? and user_city = ?
Nach dem Login kopieren

如果where标签里面的if标签有满足条件的,那么where标签就会被拼接成where语句,若if标签拼接的SQL最前面有and语句,那么这个and将会被删除。使用这种方法, 会自动删除SQL中不需要的关键字,所以一般 if 标签和 where 标签会组合起来使用。

trim

trim标签中的 prefixsuffix属性会被用于生成实际的 SQL 语句,会和标签内部的语句拼接。

如果语句的前面或后面遇到 prefixOverridessuffixOverrides属性中指定的值,MyBatis 会自动将它们删除。在指定多个值的时候,别忘了每个值后面都要有一个空格,保证不会和后面的 SQL 连接在一起。

prefix:给拼接的SQL语句加一个前缀

suffix:给拼接的SQL语句加一个后缀

prefixOverrides:拼接的SQL语句前面遇到 prefixOverrides,MyBatis 会自动将它们删除

suffixOverrides:拼接的SQL语句后面遇到 suffixOverrides,MyBatis 会自动将它们删除

下面使用trim标签来实现where标签的功能

select id, username, user_email userEmail, user_city userCity, age 
from user where username = ?
Nach dem Login kopieren

如果username为空,userEmail和userCity不为空,那么if 标签拼接的SQL语句如下所示

select id, username, user_email userEmail, user_city userCity, age 
from user where and user_email = ? and user_city = ?
Nach dem Login kopieren

因为trim标签设置了prefixOverrides=”and”,而上面的SQL前面有and语句,所以需要将上面的and语句删掉,又因为trim标签设置了prefix=”where”,所以需要在拼接的SQL语句前面加一个where语句

最后trimDie Attribute prefix und suffix im Tag trim werden verwendet, um die eigentliche SQL-Anweisung zu generieren kombiniert mit der Innenseite des Tag-Satz-Spleißens.

Suffix: Fügen Sie der gespleißten SQL-Anweisung ein Suffix hinzu.

Verwenden Sie das Tag trim unten, um die Funktion des Tags where zu implementieren nicht leer sind, dann if Die SQL-Anweisung für das Tag-Spleißen lautet wie folgt

    <select id="findByUser" resultType="com.example.mybatis.entity.User">
        select
        id, username, user_email userEmail, user_city userCity, age        from user
        <where>
            <if test="username != null and username != &#39;&#39;">
                username = #{username}
            </if>
            <if test="userEmail != null and userEmail != &#39;&#39;">
                and user_email = #{userEmail}
            </if>
            <if test="userCity != null and userCity != &#39;&#39;">
                and user_city = #{userCity}
            </if>
        </where>
    </select>
Nach dem Login kopieren

Weil das trim-Tag mit prefixOverrides="and" festgelegt ist und die obige SQL eine and-Anweisung enthält davor, daher muss die obige „and“-Anweisung gelöscht werden. Da das trim-Tag mit dem Präfix „where“ festgelegt ist, muss vor dem gespleißten ​ eine „where“-Anweisung hinzugefügt werden ​SQL-Anweisung

Abschließend wird die SQL-Anweisung des trim-Tags gespleißt. Wie unten gezeigt

<select id="findByUser" resultType="com.example.mybatis.entity.User">
        select
        id, username, user_email userEmail, user_city userCity, age
        from user        <trim prefix="where" prefixOverrides="and">
            <if test="username != null and username != &#39;&#39;">
                username = #{username}            </if>
            <if test="userEmail != null and userEmail != &#39;&#39;">
                and user_email = #{userEmail}            </if>
            <if test="userCity != null and userCity != &#39;&#39;">
                and user_city = #{userCity}            </if>
        </trim>
    </select>
Nach dem Login kopieren

choose

Manchmal möchten wir es nicht auf alle bedingten Anweisungen anwenden, sondern einfach nur eine davon auszuwählen. Für diese Situation stellt MyBatis das Element „select“ bereit, das der switch-Anweisung in Java ähnelt. Das

and user_email = #{userEmail} and user_city = #{userCity}
Nach dem Login kopieren

set

🎜set-Tag wird für den Update-Vorgang verwendet, der automatisch SQL-Anweisungen basierend auf der Parameterauswahl generiert. 🎜🎜Die Schnittstelle ist wie folgt definiert:🎜
where user_email = #{userEmail} and user_city = #{userCity}
Nach dem Login kopieren
🎜Der entsprechende Mapper.

接口定义如下所示

public List<User> getUsersByIds(List<Integer> ids);
Nach dem Login kopieren

接口对应的 Mapper.xml 定义如下所示

<!--
        collection: 指定要遍历的集合
            默认情况下
                如果为Collection类型的,key为collection;
                如果为List类型的,key为list
                如果是数组类型,key为array
            可以通过@Param("ids")来指定key
        item: 将当前遍历的元素赋值给指定的变量
        open: 给遍历的结果添加一个开始字符
        close: 给遍历的结果添加一个结束字符
        separator: 每个元素之间的分隔符
    --><select id="getUsersByIds"
        resultType="com.example.mybatis.entity.User">
    select * from user
    where id in    <foreach collection="list" item="id" open="(" close=")" separator=",">
        #{id}    </foreach></select>
Nach dem Login kopieren

用于批量插入

接口定义如下所示

public int addUserList(List<User> users);
Nach dem Login kopieren

接口对应的 Mapper.xml 定义如下所示

<insert id="addUserList"
        parameterType="com.example.mybatis.entity.User">
    insert into user
    (username, user_email, user_city, age)
    values    <foreach item="user"  collection="list" separator=",">
        (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age})    </foreach></insert><!--返回自增主键--><insert id="addUserList"
        parameterType="com.example.mybatis.entity.User"
        useGeneratedKeys="true"
        keyProperty="id">
    insert into user
    (username, user_email, user_city, age)
    values    <foreach item="user"  collection="list" separator=",">
        (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age})    </foreach></insert><!--还可以这样写--><!--
    这种方式需要数据库连接属性设置allowMultiQueries=true
    这种分号分隔多个SQL还可以用于其他的批量操作,如修改、删除
--><insert id="addUserList"
        parameterType="com.example.mybatis.entity.User">
    <foreach item="user"  collection="list" separator=";">
        insert into user
        (username, user_email, user_city, age)
        values
        (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age})    </foreach></insert><!--如果是Oracle数据库,则需要这样写--><insert id="addUserList"
        parameterType="com.example.mybatis.entity.User">
    <foreach item="user" open="begin" close="end;"  collection="list">
        insert into user
        (username, user_email, user_city, age)
        values
        (#{user.username}, #{user.userEmail}, #{user.userCity}, #{user.age});    </foreach></insert>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonLernen Sie das dynamische SQL von MyBatis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen HQL und SQL im Hibernate-Framework? Was ist der Unterschied zwischen HQL und SQL im Hibernate-Framework? Apr 17, 2024 pm 02:57 PM

HQL und SQL werden im Hibernate-Framework verglichen: HQL (1. Objektorientierte Syntax, 2. Datenbankunabhängige Abfragen, 3. Typsicherheit), während SQL die Datenbank direkt betreibt (1. Datenbankunabhängige Standards, 2. Komplexe ausführbare Datei). Abfragen und Datenmanipulation).

Verwendung der Divisionsoperation in Oracle SQL Verwendung der Divisionsoperation in Oracle SQL Mar 10, 2024 pm 03:06 PM

„Verwendung der Divisionsoperation in OracleSQL“ In OracleSQL ist die Divisionsoperation eine der häufigsten mathematischen Operationen. Während der Datenabfrage und -verarbeitung können uns Divisionsoperationen dabei helfen, das Verhältnis zwischen Feldern zu berechnen oder die logische Beziehung zwischen bestimmten Werten abzuleiten. In diesem Artikel wird die Verwendung der Divisionsoperation in OracleSQL vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Zwei Arten von Divisionsoperationen in OracleSQL In OracleSQL können Divisionsoperationen auf zwei verschiedene Arten durchgeführt werden.

Vergleich und Unterschiede der SQL-Syntax zwischen Oracle und DB2 Vergleich und Unterschiede der SQL-Syntax zwischen Oracle und DB2 Mar 11, 2024 pm 12:09 PM

Oracle und DB2 sind zwei häufig verwendete relationale Datenbankverwaltungssysteme, die jeweils über ihre eigene, einzigartige SQL-Syntax und -Eigenschaften verfügen. In diesem Artikel werden die SQL-Syntax von Oracle und DB2 verglichen und unterschieden und spezifische Codebeispiele bereitgestellt. Datenbankverbindung Verwenden Sie in Oracle die folgende Anweisung, um eine Verbindung zur Datenbank herzustellen: CONNECTusername/password@database. In DB2 lautet die Anweisung zum Herstellen einer Verbindung zur Datenbank wie folgt: CONNECTTOdataba

Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Feb 26, 2024 pm 07:48 PM

Interpretation der dynamischen SQL-Tags von MyBatis: Detaillierte Erläuterung der Verwendung von Set-Tags. MyBatis ist ein hervorragendes Persistenzschicht-Framework. Es bietet eine Fülle dynamischer SQL-Tags und kann Datenbankoperationsanweisungen flexibel erstellen. Unter anderem wird das Set-Tag zum Generieren der SET-Klausel in der UPDATE-Anweisung verwendet, die sehr häufig bei Aktualisierungsvorgängen verwendet wird. In diesem Artikel wird die Verwendung des Set-Tags in MyBatis ausführlich erläutert und seine Funktionalität anhand spezifischer Codebeispiele demonstriert. Was ist Set-Tag? Set-Tag wird in MyBati verwendet

So beheben Sie den 5120-Fehler in SQL So beheben Sie den 5120-Fehler in SQL Mar 06, 2024 pm 04:33 PM

Lösung: 1. Überprüfen Sie, ob der angemeldete Benutzer über ausreichende Berechtigungen zum Zugriff auf oder zum Betrieb der Datenbank verfügt, und stellen Sie sicher, dass der Benutzer über die richtigen Berechtigungen verfügt. 2. Überprüfen Sie, ob das Konto des SQL Server-Dienstes über die Berechtigung zum Zugriff auf die angegebene Datei verfügt Ordner und stellen Sie sicher, dass das Konto über ausreichende Berechtigungen zum Lesen und Schreiben der Datei oder des Ordners verfügt. 3. Überprüfen Sie, ob die angegebene Datenbankdatei von anderen Prozessen geöffnet oder gesperrt wurde. Versuchen Sie, die Datei zu schließen oder freizugeben, und führen Sie die Abfrage erneut aus . Versuchen Sie es als Administrator. Führen Sie Management Studio aus als usw.

Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter Feb 23, 2024 am 09:51 AM

MyBatisGenerator ist ein offiziell von MyBatis bereitgestelltes Codegenerierungstool, mit dem Entwickler schnell JavaBeans, Mapper-Schnittstellen und XML-Zuordnungsdateien generieren können, die der Datenbanktabellenstruktur entsprechen. Bei der Verwendung von MyBatisGenerator zur Codegenerierung ist die Einstellung der Konfigurationsparameter von entscheidender Bedeutung. Dieser Artikel beginnt aus der Perspektive der Konfigurationsparameter und untersucht eingehend die Funktionen von MyBatisGenerator.

Datenbanktechnologie-Wettbewerb: Was sind die Unterschiede zwischen Oracle und SQL? Datenbanktechnologie-Wettbewerb: Was sind die Unterschiede zwischen Oracle und SQL? Mar 09, 2024 am 08:30 AM

Datenbanktechnologie-Wettbewerb: Was sind die Unterschiede zwischen Oracle und SQL? Im Datenbankbereich sind Oracle und SQL Server zwei hoch angesehene relationale Datenbankverwaltungssysteme. Obwohl beide zur Kategorie der relationalen Datenbanken gehören, gibt es viele Unterschiede zwischen ihnen. In diesem Artikel befassen wir uns mit den Unterschieden zwischen Oracle und SQL Server sowie deren Funktionen und Vorteilen in praktischen Anwendungen. Zunächst einmal gibt es Unterschiede in der Syntax zwischen Oracle und SQL Server.

Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Feb 23, 2024 pm 08:13 PM

Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Während des Entwicklungsprozesses war der effiziente Datenzugriff schon immer einer der Schwerpunkte der Programmierer. Für Persistenzschicht-Frameworks wie MyBatis ist Caching eine der Schlüsselmethoden zur Verbesserung der Datenzugriffseffizienz. MyBatis bietet zwei Caching-Mechanismen: Cache der ersten Ebene und Cache der zweiten Ebene. Der Cache der ersten Ebene ist standardmäßig aktiviert. In diesem Artikel wird der Mechanismus des First-Level-Cache von MyBatis ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis zu erleichtern

See all articles