MyBatis導入の設定について【Kotlinサーバーサイドプログラミング実践開発】

# はじめに

以下の書籍の第2部 Kotlinでのサーバーサイド開発 3 MyBatisの導入でつまづいたところをまとめています

https://www.amazon.co.jp/Kotlin-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E8%B7%B5%E9%96%8B%E7%99%BA-%E7%AB%B9%E7%AB%AF-%E5%B0%9A%E4%BA%BA/dp/4297118599/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1YIVDALYT3Q9K&keywords=kotlin&qid=1672837760&sprefix=kotli%2Caps%2C389&sr=8-2

説明が簡素的なためMybatisの導入から躓いたので、参考になればと思います

# Mybatisの依存関係追加

まずは依存関係を追加するところです

```
id("com.arenagod.gradle.MybatisGenerator") version "1.4"
```

としていましたが、ビルドするとエラーがでてしまいます

```
In plugin 'com.arenagod.gradle.MybatisGenerator' type 
'com.arenagod.gradle.MybatisGeneratorTask' property 'configFile' 
is missing an input or output annotation.
```

調べたところ以下の記事を発見

https://qiita.com/okaponta_/items/a5fa423e816fef126e87

代わりに以下を利用します

```
id("com.thinkimi.gradle.MybatisGenerator") version "2.4"
```

最終的には以下のようになりました

```kotlin:build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
	id("org.springframework.boot") version "3.0.1"
	id("io.spring.dependency-management") version "1.1.0"
	id("com.thinkimi.gradle.MybatisGenerator") version "2.4"
	kotlin("jvm") version "1.7.22"
	kotlin("plugin.spring") version "1.7.22"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

repositories {
	mavenCentral()
}

dependencies {
	implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
	implementation("org.springframework.boot:spring-boot-starter-web")
	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
	implementation("org.mybatis:mybatis:3.5.6")
	implementation("org.mybatis.dynamic-sql:mybatis-dynamic-sql:1.2.1")
	implementation("mysql:mysql-connector-java:8.0.23")
	implementation("org.mybatis.generator:mybatis-generator-core:1.4.0")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
	kotlinOptions {
		freeCompilerArgs = listOf("-Xjsr305=strict")
		jvmTarget = "17"
	}
}

tasks.withType<Test> {
	useJUnitPlatform()
}

mybatisGenerator {
	verbose = true
	configFile = "/home/watanabejin/workspace/kotlin-server-side-chap4/src/main/resources/generatorConfig.xml"
}
```

`mybatisGenerator`でエラーになるのですが、ダウンロードが済むとエラーが消えました(intellijが勝手にやってくれて時間解決しました)

また、configFileは絶対パスで指定することでうまく通りました

# MyBatis Generatorでの生成

`generatorConfig.xml`に`mysql-connector-java`のパスを入れる必要があるのですが、`.gradle`にファイルが見つかりませんでした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f20dbe46-d2ee-e2a0-e9dc-9e6e2b1dd429.png)

Intellijの外部ライブラリがディレクトリの下にあるのでそこを見るとわかります
そこから`mysql-connctor-java`をみつけて、`.jar`の絶対パスを右クリックでコピーして貼り付けることでうまくいきました

# @MapperのDIが動かない

現在調査中です
一応解決はしていますが、原因はわかっていません

https://zenn.dev/jinwatanabe/scraps/d40d8f1a2d2a9c

# おわりに

軽く諦めかけていましたがうまく行ってよかったです。
個人的にはExposedを使いたいなと思いました。XMLがいろいろ書いてあってよくわかっていないです

# 参考

https://github.com/n-takehata/kotlin-server-side-programming-practice/blob/main/part2/chapter05/mybatis-with-springboot/demo/src/main/resources/generatorConfig.xml

https://qiita.com/okaponta_/items/a5fa423e816fef126e87