Ich möchte die automatische Generierung von DB Mapper und Entity in der Java-Entwicklung ausprobieren. ⇒ Lass uns Mybatis Generator benutzen! Das ist.
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).
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 |
Holen Sie es sich vom Marktplatz in Eclipse → "Hilfe".
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'
}
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 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>
"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.
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.
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.
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
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.