💡
MyBatis Generatorを導入する
バージョン
- MyBatis 3.x
- MyBatis Generator 1.4.1
- MySQL 8.x
準備
Eclipse, またはJDKとMavenのダウンロードが必要です。
Eclipseの場合
他のサイトをご参照下さい。
JDKとMavenの場合
- JDKをダウンロード、JAVA_HOME環境変数をJDKダウンロードパスにして追加する
- Mavenをダウンロード、PATH環境変数へMavenダウンロードパスのbinにして追加する
- Mavenリポジトリから必要なライブラリのMaven設定をコピーし、このファイルへ貼り付ける
- コマンド
mvn dependency:copy-dependencies
を実行する
→ target ディレクトリにJARファイルが入る
導入方法
- MyBatis GeneratorのJARをダウンロードする
- 設定ファイルを作る
- コマンドを実行する → 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のドライバクラス名を変更しても。
- MySQL 8.xより前:
com.mysql.jdbc.Driver
- MySQL 8.x: 6.1 Driver/Datasource Class Name
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