[JAVA] Générons automatiquement Mapper & Entity avec MyBatis Generator!

À propos de cette page

Je veux essayer la génération automatique de DB Mapper et Entity dans le développement Java. ⇒ Utilisons Mybatis Generator! C'est.


Qu'est-ce que MyBatis Generator?

Un interpréteur qui convertit et échange des données entre les programmes Java et les bases de données. (Un type de mappeur objet-relationnel (O / RM)) Donc, ce que je veux faire cette fois, c'est la fonction "Generate" (= génération automatique d'objets Java et Mapper).


Politique de développement

La politique est d'ajouter My Batis au-dessus de Spring Boot & Gradle. Si vous êtes de la construction de l'environnement, veuillez vous référer à ce qui suit. ⇒ Introduction à Spring Boot ... C'est bien, alors j'en suis sûr!

environnement un service/version
Environnement d'exécution Windows10
Environnement de développement eclipse Oxygen.2 Release (4.7.2)Version Java
langage de développement Java 8
DB PostgreSQL 10
Framework SpringBoot 2.1.3
Dépendances PostgreSQL、Thymeleaf、Web

Installez Mybatis Generator sur eclipse

Obtenez-le sur le marché dans eclipse → "Aide".


Bienvenue My Batis dans le projet

Ajoutez mybatis-spring-boot-starter à Gradle. Effectuez ensuite une actualisation de Gralde pour mettre à jour les dépendances.

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'
	//Postscript
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'
	//Jusque là
	runtimeOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'org.postgresql:postgresql'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

image.png


Préparez une table côté DB

Faites une table d'essai de manière appropriée.

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;

Créer un fichier de configuration d'exécution

Créez un fichier xml qui définit la table à générer automatiquement et l'emplacement de stockage du produit. Stocker dans le répertoire sous 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">

    <!--Paramètres de connexion à la base de données pour l'acquisition des informations de schéma-->
    <jdbcConnection driverClass="org.postgresql.Driver"
        connectionURL="jdbc:postgresql://localhost:5432/* Nom du schéma *"
        userId="* Identifiant d'utilisateur *"
        password="※mot de passe※">
    </jdbcConnection>

    <!--Paramètres pour générer un modèle de domaine qui stocke les résultats SELECT, etc.-->
    <javaModelGenerator targetPackage="com.lab.app.ketman.mybatis.domain" targetProject="※Nom du projet※/src/main/java">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!--Paramètres pour générer du XML avec des paramètres SQL-->
    <sqlMapGenerator targetPackage="com/lab/app/ketman/mybatis" targetProject="※Nom du projet※/src/main/resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
    <!--Paramètres pour générer une classe de mappeur-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.lab.app.ketman.mybatis.mapper" targetProject="※Nom du projet※/src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!--Spécifiez la table pour générer le code-->
    <table schema="orange" tableName="songs">
      <property name="useActualColumnNames" value="true" />
    </table>

  </context>
</generatorConfiguration>

Exécuter

"Exécuter" -> "Exécuter la configuration" -> "Mon générateur Batis" Sélectionnez generatorConfig.xml dans le fichier de configuration et exécutez-le. Les fichiers suivants doivent être créés dans le répertoire spécifié dans generationConfig.xml.

image.png


Affichons-le à l'écran

Insérez-le correctement.

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

Cette fois, il est supposé fonctionner sur Spring Boot, donc Ajoutez l'annotation "@Mapper" à la classe Mapper générée.

SongsMapper.java


@Mapper
public interface SongsMapper {

Appelez le mappeur depuis le contrôleur.

SampleController.java


package com.lab.app.ketman.controller;

//importation omise

@Controller
//Doit spécifier le chemin où la classe Mapper est stockée
@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");	//Stocker les résultats de la recherche dans l'objet Chansons
		model.addAttribute("title", s.getTitle());	//Obtenez la valeur avec getter
		return "index";
	}
}


Obtenez l'attribut à valeur ajoutée du côté HTML. (Depuis ce temps, il est supposé fonctionner sur Spring Boot, J'utilise le Thymeleaf recommandé. )

index.html


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

J'ai pu le sortir en toute sécurité. image.png


Supplément ①

Au début, le lien entre SongsMapper.xml et SongsMapper.java ne fonctionnait pas, Instruction liée non valide (non trouvée) J'ai renvoyé une erreur. Cette fois, il a été résolu en faisant correspondre les chemins sur les côtés xml et java.

Cité ci-dessous: Spring Boot + Mybatis mapper-locations

Dans Spring Boot + Mybatis, si les chemins d'accès aux classes Mapper XML et Mapper sont identiques, Mybatis lira Mapper XML sans les spécifications ci-dessus. Mapper XML et la classe Mapper ont le même chemin "l'image ressemble à ceci: ・ Src / main / java / jp / co / arsware / exemple / mapper / CityMapper.java ・ Src / main / resources / jp / co / arsware / example / mapper / CityMapper.xml

  • Si le chemin sous co est le même, il sera lu.

Cependant, même si mapper-locations est défini dans application.properties, il n'est pas résolu ... Ce point est inconnu.


Supplément ②

Vous devez également faire attention à la configuration des packages tels que Controller. Cet article était facile à lire. Causes et contre-mesures lorsqu'aucun bean éligible de type n'apparaît dans Spring Boot


en conclusion

Dans cet article, nous avons traité de la confirmation de fonctionnement à l'aide de Mybatis Generator. En maintenant XML et Example.java, je pense que nous pouvons gérer les jointures et le SQL dynamique.

Recommended Posts

Générons automatiquement Mapper & Entity avec MyBatis Generator!
Générez automatiquement des entités jpa à l'aide de Gradle