💡

MyBatis Generatorを導入する

2023/02/12に公開

バージョン

  • MyBatis 3.x
  • MyBatis Generator 1.4.1
  • MySQL 8.x

準備

Eclipse, またはJDKとMavenのダウンロードが必要です。

Eclipseの場合

他のサイトをご参照下さい。

JDKとMavenの場合

  1. JDKをダウンロード、JAVA_HOME環境変数をJDKダウンロードパスにして追加する
  2. Mavenをダウンロード、PATH環境変数へMavenダウンロードパスのbinにして追加する
  3. Mavenリポジトリから必要なライブラリのMaven設定をコピーし、このファイルへ貼り付ける
  4. コマンド mvn dependency:copy-dependencies を実行する
    → target ディレクトリにJARファイルが入る

導入方法

  1. MyBatis GeneratorのJARをダウンロードする
  2. 設定ファイルを作る
  3. コマンドを実行する → Java OR Kotlinソースコードファイルが生成される

1. MyBatis GeneratorのJARをダウンロードする

以下はMavenを使う場合のJARファイルダウンロード方法です。
Eclipseを使う場合は記載してません。

<!-- JARファイルをダウンロードするだけのファイルです -->
<!-- 手順
  1. JDKをダウンロード、JAVA_HOME環境変数をJDKダウンロードパスにして追加する
  2. Mavenをダウンロード、PATH環境変数へMavenダウンロードパスのbinにして追加する
  3. Mavenリポジトリから必要なライブラリのMaven設定をコピーし、このファイルへ貼り付ける
  4. コマンド `mvn dependency:copy-dependencies` を実行する
  → target/dependency ディレクトリにJARファイルが入る
 -->

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>id</groupId>
  <artifactId>dl</artifactId>
  <version>1</version>

  <dependencies>

    <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.4.1</version>
    </dependency>

  </dependencies>
</project>

2. 設定ファイルを作る

設定ファイルサンプル
Sample Configuration for MyBatis3DynamicSql

<!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="dsql" targetRuntime="MyBatis3DynamicSql">
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/test"
        userId="test"
        password="test">
        <property name="nullCatalogMeansCurrent" value="true" />
    </jdbcConnection>

    <javaModelGenerator targetPackage="example.model" targetProject="src/main/java"/>

    <javaClientGenerator targetPackage="example.mapper" targetProject="src/main/java"/>

    <table tableName="FooTable" />
  </context>
</generatorConfiguration>

3. コマンドを実行する → Java OR Kotlinソースコードファイルが生成される

java -cp "mybatis-generator-core-x.x.x.jar;-cp "C:\Program Files (x86)\MySQL\Connector J 8.0\mysql-connector-java-8.0.30.jar" -configfile ./generatorConfig.xml -overwrite

#####
MyBatis Generator finished successfully, there were warnings.

出力ファイル

src/main/java/example/mapper/FootableDynamicSqlSupport.java
src/main/java/example/mapper/FootableMapper.java
src/main/java/example/model/Footable.java

ソースコードを出力するディレクトリやテーブルをまだ作っていなかったら作りましょう

コマンドライン

mkdir -p src/main/java    # UNIX
mkdir -p src\main\java    # Windows

SQL

CREATE TABLE IF NOT EXISTS FooTable (
  ID DECIMAL(10,0) NOT NULL
);

構成方法

→TODO: 別記事書きます

エラーが出た場合

JDBCドライバにクラスパスを通してるはずなのに

ShellRunner を指定しましょう

Running MyBatis Generator From a Command Prompt

java -cp "mybatis-generator-core-x.x.x.jar;他のJAR" org.mybatis.generator.api.ShellRunner -configfile generatorConfig.xml -overwrite

NGな場合

java -cp "C:\Program Files (x86)\MySQL\Connector J 8.0\mysql-connector-java-8.0.30.jar" -jar mybatis-generator-core-x.x.x.jar -configfile ./sample-conf-mysql.xml -overwrite

JARファイルに com/mysql/cj/jdbc/Driver.class は入ってても

jar -tf mysql-connector-java-8.0.30.jar

Javaのバージョンも8,11を試しても。
MySQLのドライバクラス名を変更しても。

Exception in thread "main" java.lang.RuntimeException: Exception getting JDBC Driver
        at org.mybatis.generator.internal.JDBCConnectionFactory.getDriver(JDBCConnectionFactory.java:100)
        at org.mybatis.generator.internal.JDBCConnectionFactory.getConnection(JDBCConnectionFactory.java:83)
        at org.mybatis.generator.config.Context.getConnection(Context.java:506)
        at org.mybatis.generator.config.Context.introspectTables(Context.java:387)
        at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:257)
        at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:189)
        at org.mybatis.generator.api.ShellRunner.main(ShellRunner.java:117)
Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.mybatis.generator.internal.ObjectFactory.internalClassForName(ObjectFactory.java:149)
        at org.mybatis.generator.internal.ObjectFactory.externalClassForName(ObjectFactory.java:120)
        at org.mybatis.generator.internal.JDBCConnectionFactory.getDriver(JDBCConnectionFactory.java:97)

参考

Discussion