1.目的
SpringBootのAPIを作成時に、Mybatisを用いて、DBより取得をするにあたって、ModelとMapperを作成する必要があり、ありきたりなやり方ですが、MyBatisGeneratorを用いて、自動生成するやり方を残します。
2.環境
eclipse(Version: 2022-12 (4.26.0))
java(ver.17)
spring boot 3.1.1
Gradle - Groovy
mysql(Ver 8.0.33)
3.事前準備
(1) DBを準備する。
※今回はMysql(mysql Ver 8.0.33 for macos10.15 on x86_64 (Homebrew))を事前にインストールして、使用する。
Last login: Sun Aug 6 12:02:12 on ttys000
xxxxx> mysql --version
mysql Ver 8.0.33 for macos10.15 on x86_64 (Homebrew)
(2) DB内にスキーマを作成して、テーブルを用意する。
※テーブルの内容は問わない。テーブルの中に定義があれば良い。
(mysqlで作成後、DB操作のツールでアクセスして、テーブルを作成済み)
(3) 対象のSpring Bootのプロジェクトを作成する。
① Eclipseで、ファイル→新規→Spring スタータープロジェクトで選択し、設定は標準で作成する。(プロジェクト名は設定必要)
② ①の後に、以下のようにプロジェクトが作成されれば問題なし。
④ MyBatisGeneratorの最新版をインストールする。(画像は既にインストール済みの場合)
⑤ 「build.gradle」の内容を設定。
(以下、今回、事前検証で成功したものを掲載)
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.2'
id 'io.spring.dependency-management' version '1.1.2'
}
group = 'com'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// 依存性を追加
implementation 'org.openapitools:jackson-databind-nullable:0.2.1'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.9'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
runtimeOnly 'com.mysql:mysql-connector-j'
}
tasks.named('test') {
useJUnitPlatform()
}
4.作成時
① 「mybatis-generator-config.xml」を追加する。
(※そのまま流用して、内容をこの後編集すれば良い。)
<!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="demoTables" targetRuntime="MyBatis3">
<!-- DB接続設定 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/【スキーマ名】"
userId="【スキーマのユーザID】"
password="【スキーマのパスワード】"
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!-- Select結果がマッピングされる、Javaモデルの出力設定 -->
<javaModelGenerator targetPackage="【作成する任意パス】1" targetProject="mybatisTest/src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- SQLを定義したXMLファイルの出力設定 -->
<sqlMapGenerator targetPackage="【作成する任意パス】2" targetProject="mybatisTest/src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapperインターフェースの出力設定 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="【作成する任意パス】3" targetProject="mybatisTest/src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 自動生成するテーブルの設定 -->
<!-- ここを設定することでCRUDのつくりを操作できる -->
<table tableName="%"
enableInsert="true"
enableSelectByPrimaryKey="true"
enableUpdateByPrimaryKey="true"
enableDeleteByPrimaryKey="true"
enableSelectByExample="true"
enableUpdateByExample="true"
enableDeleteByExample="true"
enableCountByExample="true"
selectByPrimaryKeyQueryId="true"
selectByExampleQueryId="true"
modelType="flat">
</table>
</context>
</generatorConfiguration>
② 内容を修正
・DB情報
・【作成する任意パス】1 〜 【作成する任意パス】3
→DB接続して、取得した内容でModelとMapperを作成できるように設定。
③「mybatis-generator-config.xml」を右クリックして、実行→ 1 Run MyBatis Generatorをクリックする。(表示されない場合は、実行の構成より、設定をする)
④実行後にコンソールに、以下のように表示されたら、MyBatisGeneratorの実行が成功である。
MyBatis Generator Started...
ビルドファイル: /Users/xxxxx/Documents/GitHub/.metadata/.plugins/org.mybatis.generator.eclipse.ui/.generatedAntScripts/mybatisTest-mybatis-generator-config.xml.xml
ビルド成功
MyBatis Generator Finished
4.実行結果
※作成された階層の確認。
① Mapperの確認
→ 「mybatis-generator-config.xml」にて
『SQLを定義したXMLファイルの出力設定』で指定した階層を確認
※例はテーブル「M_TALENT」に紐づく、Mapperファイル
→ 「mybatis-generator-config.xml」にて
『Mapperインターフェースの出力設定』で指定した階層を確認
※例はテーブル「M_TALENT」に紐づく、Mapperのインタフェース
② Modelの確認
→ 「mybatis-generator-config.xml」にて
『Select結果がマッピングされる、Javaモデルの出力設定』で指定した階層を確認
※例はテーブル「M_TALENT」に紐づく、Modelファイル
5.まとめ
ここで実装をしたものを継承することでmybatisを用いた開発を楽にすることができます。
使用方法はここでは割愛しますが、作成したものを階層を変更したり、少しいじることで、
無事mybatisで取得した結果をModelへ格納までできました。
その際にMapStructを用いるのでまた次回はmapStructの記事を書きます。