はじめに
・PHP + Laravelが普段使いだけどSpring + java8 + Mybatis案件で機能追加開発に携わって、Mybatis気に入った。
・DDD勉強中だし、Kotlinでやりたい。
・いざ導入。
・MybatisGeneratorをbuild.gradle.ktsで書くにはどうする?となっても一発で良いのが出ない。
ということで動かしたので備忘録として残します。
前提
・Apple M1
・openjdk version "1.8.0_302"
・IntellijIDEAを利用している
・MySQL8系 がローカルにインストール済み
・Spring Initializerで作成 https://start.spring.io/
結論
対象ファイル
・build.gradle.kts にmybatisgeneratorを実行するタスクを追加する
・src/main/resources/generatorConfig.ymlを用意する
・最後にプロジェクト直下で
./gradlew mybatisGenerator
・コマンド成功後のフォルダ例(自分はプロジェクト名をdddで作っていますが・・・)
記述内容(コメントアウトで簡単な説明をしてます)
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.6.1"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.6.0"
kotlin("plugin.spring") version "1.6.0"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0")
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
implementation("mysql:mysql-connector-java:8.0.22")
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("io.projectreactor:reactor-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
/** -----------------------------------------------------
* ここ以降が肝です。 Mybatis Generator 実行タスク
* -----------------------------------------------------*/
val mybatisMapperVersion = "4.1.5"
val mybatisGeneratorVersion = "1.4.0"
val mysqlConnectorJavaVersion = "8.0.22"
val mybatisGenerator by configurations.creating
dependencies {
mybatisGenerator(group="org.mybatis.generator", name="mybatis-generator-core", version=mybatisGeneratorVersion)
mybatisGenerator(group="mysql", name="mysql-connector-java", version=mysqlConnectorJavaVersion)
mybatisGenerator(group="tk.mybatis", name="mapper", version=mybatisMapperVersion)
}
task("mybatisGenerator") {
doLast {
ant.withGroovyBuilder {
"taskdef"("name" to "mbgenerator", "classname" to "org.mybatis.generator.ant.GeneratorAntTask", "classpath" to mybatisGenerator.asPath)
}
ant.withGroovyBuilder {
"mbgenerator"("overwrite" to true, "configfile" to
/*
自分はフルパスでやりました。
/Users/hogehoge/・・・/demo/src/main/resources/generatorConfig.yml
要は、generatorConfig.ymlまでのフルパスを指定すれば大丈夫です。
なので、例えば、
resources/mybatis/config/generatorConfig.yml
に作成しても大丈夫です。
*/
"path/to/main/resources/generatorConfig.xml", "verbose" to true)
}
}
}
generatorConfig.yml
<?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>
<!-- mysql-connectorの場所は例えば、.gradle/caches/modules-2/files-2.1/mysql/mysql-connector-java/~ にある。とにかくjarファイルを見つける。 -->
<classPathEntry
location="path/to/.gradle/caches/modules-2/files-2.1/mysql/mysql-connector-java/8.0.22/長い文字列/mysql-connector-java-8.0.22.jar"/>
<context id="MySQLTables" targetRuntime="MyBatis3Kotlin">
<plugin type="org.mybatis.generator.plugins.MapperAnnotationPlugin"/>
<commentGenerator>
<property name="suppressDate" value="true"/>
</commentGenerator>
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/対象のDB名"
userId="対象のMySQLユーザー名"
password="対象のMySQLパスワード">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- src/main/kotlin/com.example.対象プロジェクト名.infrastructure など、任意のパッケージを src/main/kotlin/に作成し指定する。 -->
<javaModelGenerator
targetPackage="com.example.対象プロジェクト名.infrastructure"
targetProject="src/main/kotlin">
</javaModelGenerator>
<javaClientGenerator
targetPackage="com.example.対象プロジェクト名.infrastructure"
targetProject="src/main/kotlin">
</javaClientGenerator>
<table tableName="%"/>
</context>
</generatorConfiguration>
その他注意点
・PlayFramework + ScalikeJDBC でMySQL8に接続した時、JDBCドライバーがMySQLバージョンにあってないと怒られたことがあります。その経験から、generatorConfig.ymlで利用するドライバーは
com.mysql.cj.jdbc.Driver
にしています。
最後に
なんでおめえJava17じゃねえんだよ・・・・となった方、ごめんなさい。
とにかくいま、僕はDDDの練習がしたいのです。
すいません。終わります。
あれ・・・・?Generatorいる・・・?
#参考にした記事
これが大先生です。
https://cwlab.hatenablog.jp/entry/2019/12/18/233216
こちらはKotlin始めるとき買った書籍の著者さんが公開しているGithubです。
https://github.com/n-takehata/kotlin-server-side-programming-practice/tree/main/part2/chapter05