MybatisPlus-Schnellstart der allgemeinen Anmerkungskonfiguration

var code = „81563903-534d-4850-9d6a-a9fb0318f593“

In diesem Kurs wird umfassend die Verwendung des Mybatis-Frameworks erläutert, vom Schnellstart über die Prinzipanalyse bis hin zur praktischen Anwendung . Jeder Wissenspunkt hat einen Fall zum Demonstrieren und Lernen. Am Ende werden Sie ihn durch Lernen umfassend beherrschen und so die Entwicklung von Mybatis effizienter und systematischer lernen.

Durch die Entwicklung des Projekts sollten Sie feststellen, dass der CRUD-Funktionscode einer einzelnen Tabelle sehr repetitiv und nicht schwierig ist. Dieser Teil des Codes ist oft relativ umfangreich und zeitaufwändig zu entwickeln.

Daher werden derzeit in Unternehmen einige Komponenten verwendet, um die CRUD- Entwicklungsarbeit einer einzelnen Tabelle zu vereinfachen oder wegzulassen . Eine Komponente, die derzeit in China häufiger verwendet wird, ist MybatisPlus.

Die offizielle Website lautet wie folgt:

Einführung | MyBatis-Plus

Natürlich vereinfacht MybatisPlus nicht nur Einzeltabellenoperationen, sondern bietet auch viele Erweiterungen der Funktionen von Mybatis . Es kann unsere Entwicklung einfacher und effizienter machen.

Durch die heutige Studie werden wir folgende Ziele erreichen:

  • Kann MybatisPlus verwenden, um grundlegendes CRUD zu implementieren
  • Verwendet die bedingte Konstruktion, um Abfragen zu erstellen und Anweisungen zu aktualisieren
  • Verwendet allgemeine Anmerkungen in MybatisPlus
  • Wird MybatisPlus verwenden, um Aufzählungs- und JSON-Typfelder zu verarbeiten
  • Wird MybatisPlus verwenden, um Paging zu implementieren

1. Schnellstart

Um das Testen zu erleichtern, erstellen wir zunächst ein neues Projekt und bereiten einige Basisdaten vor.

1.1.Umgebungsvorbereitung

Kopieren Sie ein im Vorkursmaterial bereitgestelltes Projekt in Ihren Arbeitsbereich (ohne Leerzeichen oder Sonderzeichen):

Öffnen Sie es dann mit Ihrem IDEA-Tool. Die Projektstruktur ist wie folgt:

Achten Sie darauf, die JDK-Version des Projekts auf JDK11 zu konfigurieren. Klicken Sie zunächst auf die Projektstruktureinstellungen:

Konfigurieren Sie JDK im Popup-Fenster:

Als nächstes müssen wir zwei Tabellen importieren. Die SQL-Dateien wurden in den Materialien vor dem Unterricht bereitgestellt:

Die entsprechende Datenbanktabellenstruktur ist wie folgt:

Ändern Sie abschließend application.yamldie JDBC-Parameter in Ihre eigenen Datenbankparameter:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: MySQL123
logging:
  level:
    com.itheima: debug
  pattern:
    dateformat: HH:mm:ss

1.2. Schnellstart

Wenn wir beispielsweise CRUD für die Benutzertabelle implementieren möchten, benötigen wir nur die folgenden Schritte:

  • Einführung der MybatisPlus-Abhängigkeit
  • Mapper definieren

1.2.1Einführung von Abhängigkeiten

MybatisPlus bietet einen Starter zur Realisierung der automatischen Montagefunktion von Mybatis und MybatisPlus . Die Koordinaten lauten wie folgt:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

Da dieser Starter eine automatische Montage von Mybatis enthält, kann er den Starter von Mybatis vollständig ersetzen .

Letztendlich sind die Abhängigkeiten des Projekts wie folgt:

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.2.2. Mapper definieren

Um Single-Table-CRUD zu vereinfachen, bietet MybatisPlus eine Basisschnittstelle BaseMapper, die Single-Table-CRUD bereits implementiert hat:

Solange unser benutzerdefinierter Mapper dies implementiert BaseMapper, besteht daher keine Notwendigkeit, CRUD für eine einzelne Tabelle selbst zu implementieren.

Ändern Sie die Schnittstelle com.itheima.mp.mapperunter dem Paket in mp-demo UserMapper, um es zu integrieren BaseMapper:

1.2.3.Testen

Erstellen Sie eine neue Testklasse, schreiben Sie mehrere Komponententests und testen Sie grundlegende CRUD-Funktionen:

package com.itheima.mp.mapper;

import com.itheima.mp.domain.po.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDateTime;
import java.util.List;

@SpringBootTest
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    void testInsert() {
        User user = new User();
        user.setId(5L);
        user.setUsername("Lucy");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        userMapper.insert(user);
    }

    @Test
    void testSelectById() {
        User user = userMapper.selectById(5L);
        System.out.println("user = " + user);
    }

    @Test
    void testSelectByIds() {
        List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L, 5L));
        users.forEach(System.out::println);
    }

    @Test
    void testUpdateById() {
        User user = new User();
        user.setId(5L);
        user.setBalance(20000);
        userMapper.updateById(user);
    }

    @Test
    void testDelete() {
        userMapper.deleteById(5L);
    }
}

Wie Sie sehen, ist das während des laufenden Prozesses gedruckte SQL-Protokoll sehr standardmäßig:

11:05:01  INFO 15524 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
11:05:02  INFO 15524 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
11:05:02 DEBUG 15524 --- [           main] c.i.mp.mapper.UserMapper.selectById      : ==>  Preparing: SELECT id,username,password,phone,info,status,balance,create_time,update_time FROM user WHERE id=?
11:05:02 DEBUG 15524 --- [           main] c.i.mp.mapper.UserMapper.selectById      : ==> Parameters: 5(Long)
11:05:02 DEBUG 15524 --- [           main] c.i.mp.mapper.UserMapper.selectById      : <==      Total: 1
user = User(id=5, username=Lucy, password=123, phone=18688990011, info={"age": 21}, status=1, balance=20000, createTime=Fri Jun 30 11:02:30 CST 2023, updateTime=Fri Jun 30 11:02:30 CST 2023)

Sie müssen nur BaseMapper erben, um alle Einzeltabellen-CRUDs zu speichern . Ist das nicht sehr einfach?

1.3. Allgemeine Anmerkungen

Im Einführungsfall haben wir gerade nur Abhängigkeiten eingeführt und BaseMapper geerbt, um MybatisPlus verwenden zu können, was sehr einfach ist. Aber hier kommt das Problem:

Woher weiß MybatisPlus, welche Tabelle wir abfragen möchten? Welche Felder gibt es in der Tabelle?

Denken Sie daran, dass UserMapper beim Erben von BaseMapper einen generischen Wert angegeben hat:

Der Benutzer im generischen Typ ist der PO, der der Datenbank entspricht.

MybatisPlus leitet Tabelleninformationen basierend auf PO-Entitätsinformationen ab, um SQL zu generieren . standardmäßig:

  • MybatisPlus wandelt den Klassennamen der PO-Entität in Camel Case um und unterstreicht ihn als Tabellennamen.
  • MybatisPlus konvertiert alle Variablennamen der PO-Entität in Kamelbuchstaben, unterstreicht sie als Feldnamen der Tabelle und leitet den Feldtyp basierend auf dem Variablentyp ab.
  • MybatisPlus verwendet das Feld mit dem Namen „id“ als Primärschlüssel

In vielen Fällen stimmt die Standardimplementierung jedoch nicht mit dem tatsächlichen Szenario überein . Daher stellt MybatisPlus einige Anmerkungen bereit, die uns die Deklaration von Tabelleninformationen erleichtern.

1.3.1.@Tabellenname

veranschaulichen:

Beschreibung: Tabellennamenanmerkung, die die Tabelle identifiziert, die der Entitätsklasse entspricht.
Verwendungsort: Entitätsklasse

Beispiel:

@TableName("user")
public class User {
    private Long id;
    private String name;
}

Neben der Angabe des Tabellennamens kann die TableName-Annotation auch viele andere Attribute angeben :

Attribute

Typ

Muss angegeben werden

Standardwert

beschreiben

Wert

Zeichenfolge

NEIN

„“

Tabellenname

Schema

Zeichenfolge

NEIN

„“

Schema

keepGlobalPrefix

Boolescher Wert

NEIN

FALSCH

Ob der globale TablePrefix-Wert (Präfix) weiterhin verwendet werden soll (wenn der globale TablePrefix wirksam ist)

resultMap

Zeichenfolge

NEIN

„“

Die ID von resultMap in XML (wird verwendet, um bestimmte Arten der Objektbindung von Entitätsklassen zu erfüllen)

autoResultMap

Boolescher Wert

NEIN

FALSCH

Ob resultMap automatisch erstellt und verwendet werden soll (wenn resultMap festgelegt ist, wird die automatische Erstellung und Injektion von resultMap nicht durchgeführt)

ausschließenEigenschaft

String[]

NEIN

{}

Attributnamen , die seit 3.3.1 ausgeschlossen werden müssen

1.3.2.@TableId

veranschaulichen:

Beschreibung: Primärschlüsselanmerkung, die das Primärschlüsselfeld in der Entitätsklasse identifiziert. Verwendungsort
: Primärschlüsselfeld der Entitätsklasse.

Beispiel:

@TableName("user")
public class User {
    @TableId
    private Long id;
    private String name;
}

TableIdAnmerkungen unterstützen zwei Eigenschaften:

Attribute

Typ

Muss angegeben werden

Standardwert

beschreiben

Wert

Zeichenfolge

NEIN

„“

Tabellenname

Typ

Aufzählung

NEIN

IdType.NONE

Geben Sie den Primärschlüsseltyp an

IdTypeUnterstützte Typen sind:

Wert

beschreiben

AUTO

Automatische Erhöhung der Datenbank-ID

KEINER

Zustandslos, dieser Typ hat keinen Primärschlüsselsatz (die Annotation entspricht dem Folgen von global , und das globale Rio entspricht ungefähr INPUT).

EINGANG

Legen Sie den Primärschlüsselwert vor dem Einfügen selbst fest

ASSIGN_ID

Weisen Sie eine ID zu (Primärschlüsseltyp ist Number (Long und Integer) oder String) (seit 3.3.0), verwenden Sie die Methode nextId der Schnittstelle IdentifierGenerator (die Standardimplementierungsklasse ist der Schneeflockenalgorithmus DefaultIdentifierGenerator )

ASSIGN_UUID

Weisen Sie UUID zu , der Primärschlüsseltyp ist String (seit 3.3.0), verwenden Sie die Methode nextUUID der Schnittstelle IdentifierGenerator (Standardmethode).

ID_WORKER

Verteilter global eindeutiger ID-Long-Integer-Typ (bitte ASSIGN_ID verwenden)

UUID

32-Bit-UUID-Zeichenfolge (bitte ASSIGN_UUID verwenden)

ID_WORKER_STR

Verteilter global eindeutiger ID-String-Typ (bitte ASSIGN_ID verwenden)

Hier gibt es drei gängige :

  • AUTO: Verwenden Sie die Datenbank-ID, um automatisch zu wachsen
  • INPUT: ID manuell generieren
  • ASSIGN_ID: Der Snowflake-Algorithmus generiert Longeine global eindeutige ID für den Typ. Dies ist die Standard-ID-Strategie.

1.3.3.@TableField

veranschaulichen:

Beschreibung: Allgemeine Feldanmerkungen

Beispiel:

@TableName("user")
public class User {
    @TableId
    private Long id;
    private String name;
    private Integer age;
    @TableField("isMarried")
    private Boolean isMarried;
    @TableField("`concat`")
    private String concat;
}

Im Allgemeinen müssen wir @TableFieldden Feldern keine Anmerkungen hinzufügen, außer in einigen besonderen Fällen:

  • Der Name der Mitgliedsvariablen stimmt nicht
  • Mitgliedsvariablen sind isXXXnach ihnen benannt und werden gemäß JavaBeander Spezifikation MybatisPlusbeim Identifizieren von Feldern isentfernt , was zu Inkonsistenzen mit der Datenbank führt.
  • Der Name der Mitgliedsvariablen stimmt mit der Datenbank überein, steht jedoch im Konflikt mit dem Schlüsselwort der Datenbank . Verwenden Sie @TableFieldAnmerkungen, um Feldnamen „Escapezeichen“ hinzuzufügen

Weitere unterstützte Attribute sind wie folgt:

Attribute

Typ

Erforderlich

Standardwert

beschreiben

Wert

Zeichenfolge

NEIN

„“

Name des Datenbankfelds

existieren

Boolescher Wert

NEIN

WAHR

Ob es sich um ein Datenbanktabellenfeld

Zustand

Zeichenfolge

NEIN

„“

Feld , in dem die Entität die Vergleichsbedingung abfragt . Wenn ein Wert festgelegt ist, hat . Wenn nicht, wird der globale Standardwert %s=#{%s } verwendet. Weitere Informationen finden Sie unter (öffnet neues Fenster).

aktualisieren

Zeichenfolge

NEIN

„“

Der Feldaktualisierungssatz wird teilweise eingefügt. Beispiel: Wenn Sie update="%s+1" im Versionsfeld annotieren, wird angegeben, dass beim Aktualisieren version=version+1 festgelegt wird (dieses Attribut hat eine höhere Priorität als das el-Attribut).

insertStrategy

Aufzählung

NEIN

FieldStrategy.DEFAULT

Beispiel: NOT_NULL

In table_a(column) Werte einfügen (#{columnProperty})

updateStrategy

Aufzählung

NEIN

FieldStrategy.DEFAULT

Beispiel: IGNORIERT

update table_a set columns=#{columnProperty}

whereStrategie

Aufzählung

NEIN

FieldStrategy.DEFAULT

Beispiel: NOT_EMPTY

wobei Column=#{columnProperty}

füllen

Aufzählung

NEIN

FieldFill.DEFAULT

Strategie zum automatischen Ausfüllen von Feldern

wählen

Boolescher Wert

NEIN

WAHR

Ob eine Auswahlabfrage durchgeführt werden soll

keepGlobalFormat

Boolescher Wert

NEIN

FALSCH

Ob weiterhin das globale Format für die Verarbeitung verwendet werden soll

jdbcType

JdbcType

NEIN

JdbcType.UNDEFINED

JDBC-Typ (dieser Standardwert bedeutet nicht, dass er gemäß diesem Wert wirksam wird)

typeHandler( Typhandler )

TypeHander

NEIN

UnknownTypeHandler.class

Typprozessor (Java-Spezialtypen und Datenbanktypkonvertierung) (Dieser Standardwert bedeutet nicht, dass er entsprechend diesem Wert wirksam wird .)

numericScale

Zeichenfolge

NEIN

„“

Geben Sie die Anzahl der Stellen an, die nach dem Dezimalpunkt beibehalten werden sollen

1.4. Gemeinsame Konfigurationen

MybatisPlus unterstützt auch benutzerdefinierte Konfigurationen . Weitere Informationen finden Sie in der offiziellen Dokumentation:

Konfiguration verwenden | MyBatis-Plus

Die meisten Konfigurationen haben Standardwerte, sodass wir sie nicht konfigurieren müssen. Es gibt aber auch einige, die keinen Standardwert haben, wie zum Beispiel:

  • Alias-Scanpaket für Entitätsklassen
  • Globaler ID-Typ
mybatis-plus:
  type-aliases-package: com.itheima.mp.domain.po
  global-config:
    db-config:
      id-type: auto # 全局id类型为自增长

Es ist zu beachten, dass MyBatisPlus auch handgeschriebenes SQL unterstützt und die Leseadresse der Mapper-Datei selbst konfiguriert werden kann :

mybatis-plus:
  mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。

Sie können sehen, dass der Standardwert ist classpath*:/mapper/**/*.xml. Dies bedeutet, dass die Datei „mapper.xml“ geladen wird, solange wir sie in diesem Verzeichnis ablegen .

Erstellen wir zum Beispiel eine neue UserMapper.xmlDatei:

Dann definieren Sie darin eine Methode:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">

    <select id="queryById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

Testen Sie dann UserMapperTestdie Methode in der Testklasse:

@Test
void testQuery() {
    User user = userMapper.queryById(1L);
    System.out.println("user = " + user);
}

Supongo que te gusta

Origin blog.csdn.net/m0_67184231/article/details/132656291
Recomendado
Clasificación