[JAVA] Lassen Sie uns Mapper & Entity automatisch mit MyBatis Generator generieren!

Über diese Seite

Ich möchte die automatische Generierung von DB Mapper und Entity in der Java-Entwicklung ausprobieren. ⇒ Lass uns Mybatis Generator benutzen! Das ist.


Was ist MyBatis Generator?

Ein Interpreter, der Daten zwischen Java-Programmen und DBs konvertiert und austauscht. (Eine Art objektrelationaler Mapper (O / RM)) Was ich dieses Mal tun möchte, ist die Funktion "Generieren" (= automatische Generierung von Java-Objekten und Mapper).


Entwicklungspolitik

Die Richtlinie lautet, My Batis zusätzlich zu Spring Boot & Gradle hinzuzufügen. Wenn Sie aus dem Umweltbau stammen, lesen Sie bitte Folgendes. ⇒ Einführung in Spring Boot ... Es ist gut, also bin ich mir sicher!

Umgebung Bedienung/Ausführung
Ausführungsumgebung Windows10
Entwicklungsumgebung eclipse Oxygen.2 Release (4.7.2)Java-Version
Entwicklungssprache Java 8
DB PostgreSQL 10
Framework SpringBoot 2.1.3
Abhängigkeiten PostgreSQL、Thymeleaf、Web

Installieren Sie Mybatis Generator auf Eclipse

Holen Sie es sich vom Marktplatz in Eclipse → "Hilfe".


Willkommen My Batis zum Projekt

Fügen Sie Gradle Mybatis-Spring-Boot-Starter hinzu. Führen Sie dann eine Gralde-Aktualisierung durch, um die Abhängigkeiten zu aktualisieren.

build.gralde


plugins {
	id 'org.springframework.boot' version '2.1.3.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.lab.app.ketman'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	//Nachtrag
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'
	//Bisher
	runtimeOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'org.postgresql:postgresql'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

image.png


Bereiten Sie eine Tabelle auf der DB-Seite vor

Machen Sie einen Probetisch entsprechend.

CREATE TABLE orange.songs
(
    title character varying(30) NOT NULL,
    release_date date,
    sales integer,
    winning_flag boolean,
    song_id character(4) NOT NULL,
    CONSTRAINT song_id PRIMARY KEY (song_id)
)
WITH (
    OIDS = FALSE
);

ALTER TABLE orange.songs
    OWNER to postgres;

Erstellen Sie eine Ausführungskonfigurationsdatei

Erstellen Sie eine XML-Datei, die die automatisch zu generierende Tabelle und den Speicherort des Produkts definiert. Speichern Sie im Verzeichnis unter src / main / resources.

generationConfig.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
  <context id="PostgresTables" targetRuntime="MyBatis3">

    <!--Verbindungseinstellungen zur Datenbank zum Abrufen von Schemainformationen-->
    <jdbcConnection driverClass="org.postgresql.Driver"
        connectionURL="jdbc:postgresql://localhost:5432/* Schemaname *"
        userId="* Benutzeridentifikation *"
        password="※Passwort※">
    </jdbcConnection>

    <!--Einstellungen zum Generieren eines Domänenmodells, in dem SELECT-Ergebnisse usw. gespeichert sind.-->
    <javaModelGenerator targetPackage="com.lab.app.ketman.mybatis.domain" targetProject="※Projektname※/src/main/java">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!--Einstellungen zum Generieren von XML mit SQL-Einstellungen-->
    <sqlMapGenerator targetPackage="com/lab/app/ketman/mybatis" targetProject="※Projektname※/src/main/resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
    <!--Einstellungen zum Generieren der Mapper-Klasse-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.lab.app.ketman.mybatis.mapper" targetProject="※Projektname※/src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!--Geben Sie die Tabelle an, um den Code zu generieren-->
    <table schema="orange" tableName="songs">
      <property name="useActualColumnNames" value="true" />
    </table>

  </context>
</generatorConfiguration>

Lauf

"Ausführen" -> "Konfiguration ausführen" -> "Mein Batis-Generator" Wählen Sie generatorConfig.xml in der Konfigurationsdatei aus und führen Sie sie aus. Die folgenden Dateien sollten in dem in generationConfig.xml angegebenen Verzeichnis erstellt werden.

image.png


Lassen Sie es uns auf dem Bildschirm anzeigen

Fügen Sie es entsprechend ein.

INSERT INTO orange.songs(
	title, release_date, sales, winning_flag, song_id)
	VALUES ('Kirikirimai', '2003-06-04', 20206, false, '0001');
COMMIT;

Dieses Mal wird davon ausgegangen, dass es auf Spring Boot ausgeführt wird Fügen Sie der generierten Mapper-Klasse die Annotation "@Mapper" hinzu.

SongsMapper.java


@Mapper
public interface SongsMapper {

Rufen Sie Mapper vom Controller aus auf.

SampleController.java


package com.lab.app.ketman.controller;

//Import weggelassen

@Controller
//Muss den Pfad angeben, in dem die Mapper-Klasse gespeichert ist
@MapperScan(basePackages = { "com.lab.app.ketman.mybatis.mapper.*"})
public class SampleController {
	@Autowired
	SongsMapper sm;

	@RequestMapping("/index")
	public String index(Model model) {
		Songs s = sm.selectByPrimaryKey("0001");	//Speichern Sie die Suchergebnisse im Songs-Objekt
		model.addAttribute("title", s.getTitle());	//Holen Sie sich den Wert mit Getter
		return "index";
	}
}


Holen Sie sich das ValueAttribute von der HTML-Seite. (Da diesmal davon ausgegangen wird, dass es auf Spring Boot ausgeführt wird Ich benutze das empfohlene Thymeleaf. )

index.html


<h1 th:text="${title}"></h1>

Ich konnte es sicher ausgeben. image.png


Ergänzung ①

Zuerst funktionierte die Verknüpfung zwischen SongsMapper.xml und SongsMapper.java nicht. Ungültige gebundene Anweisung (nicht gefunden) Ich habe einen Fehler ausgegeben. Dieses Mal wurde es gelöst, indem die Pfade auf der XML- und der Java-Seite abgeglichen wurden.

Unten zitiert: Spring Boot + Mybatis-Mapper-Speicherorte

Wenn in Spring Boot + Mybatis die Mapper XML- und Mapper-Klassenpfade identisch sind, Mybatis liest Mapper XML ohne die oben genannten Spezifikationen. Mapper XML und Mapper-Klasse haben denselben Pfad "Das Bild sieht folgendermaßen aus: ・ Src / main / java / jp / co / arsware / example / mapper / CityMapper.java ・ Src / main / resources / jp / co / arsware / example / mapper / CityMapper.xml

  • Wenn der Pfad unter co der gleiche ist, wird er gelesen.

Selbst wenn Mapper-Speicherorte in application.properties definiert sind, wird dies nicht gelöst ... Dieser Punkt ist unbekannt.


Ergänzung ②

Sie müssen auch bei der Konfiguration von Paketen wie Controller vorsichtig sein. Dieser Artikel war leicht zu lesen. Ursachen und Gegenmaßnahmen, wenn im Spring Boot keine qualifizierende Bean des Typs angezeigt wird


abschließend

In diesem Artikel haben wir uns mit der Bestätigung des Betriebs mit Mybatis Generator befasst. Durch die Pflege von XML und Example.java können wir Joins und dynamisches SQL verarbeiten.

Recommended Posts

Lassen Sie uns Mapper & Entity automatisch mit MyBatis Generator generieren!
Generieren Sie automatisch jpa-Entitäten mit Gradle