一、依存関係の追加
まず、コード生成に必要な依存関係をプロジェクトに追加します。これは、対象のエンティティクラスが含まれるモジュールと、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();
}
}