MyBatis-Plusコードジェネレーターの活用:別モジュールのエンティティクラスを利用する方法

一、依存関係の追加

まず、コード生成に必要な依存関係をプロジェクトに追加します。これは、対象のエンティティクラスが含まれるモジュールと、MyBatis-Plusのコード生成ライブラリです。

<!-- エンティティクラスが含まれる別モジュールの依存関係 -->
<dependency>
    <groupId>ID</groupId>
    <artifactId>モジュール名</artifactId>
    <version>${cloud.project.version}</version>
</dependency>

<!-- MyBatis-Plus コアライブラリ -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>
<!-- MyBatis-Plus コードジェネレーター -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>
<!-- テンプレートエンジン (Velocity) -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

二、コード生成の設定

次に、コード生成器の設定を行います。主なポイントは、エンティティクラスの生成を無効にし、既存のエンティティクラスの場所を指定することです。

1. テーブル名からクラス名を生成する (キャメルケース化、プレフィックス削除)

テーブル名(例: ha_saas_goods)から、キャメルケースのクラス名(例: Goods)を生成するように設定できます。また、共通のテーブルプレフィックス(例: ha_saas_)を無視するよう指定します。

strategyConfig.setRestControllerStyle(true); // キャメルケース命名を適用
strategyConfig.setTablePrefix("ha_saas"); // テーブル名のプレフィックスを設定

2. エンティティクラスの生成をスキップする

テンプレート設定でエンティティクラスの生成を明示的に無効にします。

TemplateConfig templateSettings = new TemplateConfig()
        .setEntity(null); // エンティティクラスの生成を無効化

3. 別モジュールのエンティティクラスを使用する

パッケージ設定で、使用するエンティティクラスが含まれるパッケージを指定します。

packageConfig.setEntity("com.example.server.entity"); // エンティティクラスのパッケージを指定

三、コード生成の実装例

以下は、上記の設定を組み込んだ完全なコード生成クラスの例です。この例では、ユーザーに入力を求めるための簡易的なメソッドも含まれています。

package com.example;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.platform.commons.util.StringUtils;

import java.util.Scanner;

public class MyBatisPlusGenerator {

    /**
     * ユーザーに入力を求めるためのヘルパーメソッド
     * @param tip プロンプトメッセージ
     * @return ユーザーが入力した文字列
     */
    public static String getUserInput(String tip) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("[" + tip + "]: ");
        String input = scanner.nextLine();
        if (StringUtils.isNotBlank(input)) {
            return input;
        }
        throw new MybatisPlusException("有効な入力がありません: " + tip);
    }

    public static void main(String[] args) {
        // コード生成器のインスタンスを作成
        AutoGenerator generator = new AutoGenerator();

        // グローバル設定
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir("出力ディレクトリ"); // コード生成先のディレクトリ
        globalConfig.setFileOverride(true); // 既存ファイルを上書きするか
        globalConfig.setOpen(false); // 生成後、出力ディレクトリを開くか
        globalConfig.setAuthor("作者名"); // 作者名
        globalConfig.setIdType(IdType.AUTO); // 主キー生成戦略
        globalConfig.setBaseResultMap(true); // 基本的なResultMapを生成
        globalConfig.setBaseColumnList(true); // 基本的なColumnListを生成
        globalConfig.setServiceName("%sService"); // サービスインターフェース名のプレフィックスを設定
        globalConfig.setDateType(DateType.ONLY_DATE); // 日付型の設定
        generator.setGlobalConfig(globalConfig);

        // データソース設定
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/データベース名?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("ユーザー名");
        dataSourceConfig.setPassword("パスワード");
        generator.setDataSource(dataSourceConfig);

        // パッケージ設定
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example");
        packageConfig.setEntity("com.example.entity"); // 使用するエンティティクラスのパッケージを指定
        packageConfig.setMapper("mapper");
        packageConfig.setXml("mapper.xml");
        packageConfig.setService("service");
        packageConfig.setServiceImpl("service.impl");
        packageConfig.setController("controller");
        generator.setPackageInfo(packageConfig);

        // 戦略設定
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setNaming(NamingStrategy.underline_to_camel); // テーブル名からクラス名へ(アンダースコア→キャメルケース)
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // カラム名も同様に変換
        strategyConfig.setEntityLombokModel(false); // Lombokモデルを使用しない(エンティティを生成しないため)
        strategyConfig.setRestControllerStyle(true); // RESTコントローラースタイルを適用
        strategyConfig.setControllerMappingHyphenStyle(true); // ハイフンスタイルのURLマッピング

        // テーブルプレフィックスの設定
        strategyConfig.setTablePrefix("ha_saas"); // 例: "ha_saas_"プレフィックスを無視

        // 生成対象のテーブル名をユーザーから取得
        String tableNames = getUserInput("生成対象のテーブル名(カンマ区切り)");
        strategyConfig.setInclude(tableNames.split(","));

        generator.setStrategy(strategyConfig);

        // テンプレート設定:エンティティクラスの生成を無効化
        TemplateConfig templateSettings = new TemplateConfig()
                .setEntity(null);
        generator.setTemplate(templateSettings);

        // コード生成を実行
        generator.execute();
    }
}

タグ: MyBatis-Plus Java コードジェネレーター 依存関係管理

8月9日 23:54 投稿