皆さんJavaでORMは何を使っているでしょうか?だいたいJPA(Hibernate)かMyBatisだと思いますが、
Hibernateはやりたいことに対して複雑すぎるのがあって敬遠していると思います。
そこでMyBatisなのですが、何かと書くの面倒、楽したいってのはあると思います。
そこで検討してみるのがMyBatis Generatorではないでしょうか。というので、導入方法の紹介です。
今回やってみたのはアノテーションでの自動生成方法です。
XMLでの生成も簡単に設定で変えられます。
- 前提条件
- MarketplaceからMyBatisGeneratorを入れる
- PostgreSQLをインストール
- 適当なデータを用意する
- Spring Boot Projectを作成する
- 設定ファイルを整備する
- コードの自動生成
前提条件
コマンドラインで使えるMavenが入っていること
Eclipse Pleiades のJava Full Editionを入れとく
Pleiadesは昔重すぎて、余計なのがたくさんついてる印象であまり好きでなかったですが、
久々に使ってみるとよいです。いまだと必要なものだけが入っていていい感じ!
プラグインの相性が悪い変なハマりも少なくていいかも。
英語化したい場合は
[eclipseのインストールフォルダ]\eclipse\eclipse.ini
ファイルを変更
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
の行を削除
最後の行に-Duser.language=en_US
を追加
これでEclipseを再起動する
MarketplaceからMyBatisGeneratorを入れる
MarketplaceからMyBatis Generator 1.4.2をEclispeに入れる。
PostgreSQLをインストール
普通にインストールする。
Macの場合はここ参照
適当なデータを用意する
https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/
Spring Boot Projectを作成する
Name: demo-mybatis-generator Type: Maven Packaging: Jar Java Version: 17 Language: Java
Lombok, Spring Boot DevTools, Spring Web がデフォルトで選ばれていると思うけど、
これに加えて
MyBatis Framework, PostgreSQL Driver, Thymeleaf を追加で入れる。
設定ファイルを整備する
src/man/resources/application.properties に以下を追記
spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5432/dvdrental spring.datasource.username=postgres spring.datasource.password=postgres
※用意したデータの場合です。
pom.xmlの編集
https://mybatis.org/generator/running/runningWithMaven.html
を参考に
pom.xmlに次を追記する。
<build> <plugins> <plugin> ...(関係ないので省略) </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.2</version> <configuration> <configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
※Eclipseから実行する場合はいらないところがいくつかあります。
generatorConfig.xmlの編集
Javaの場合はtargetRuntimeで指定する生成方法で3つの方法があり、大きく次の特徴があります。
MyBatis3DynamicSql | MyBatis3 | MyBatis3Simple | |
---|---|---|---|
コード生成量 | 少なめ | 多い | 少ない |
使うクラス | MyBatis Dynamic SQL | ~Example | 普通のMapper |
Annotation/XML | Annotation | 選択可 | 選択可 |
デフォルトはMyBatis3DynamicSqlでタイプセーフでコード生成量も比較的少なく
そのままで柔軟なクエリが欠けるといった特徴があります。
しかし、独自DSLみたいな書き方を強制されるので人を選ぶ感じがあります。
自分で書く場合はAnnotationベースで書いちゃうって場合が多いと思います。
その場合、MyBatis3Simpleが多くの場合適してるのではないかと思います。
src/main/resources/generatorConfig.xml
<?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> <!-- 生成タイプはMyBatis3Simpleを選びます --> <context id="postgres" targetRuntime="MyBatis3Simple"> <!-- 生成コメントの設定 --> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- DB接続設定 --> <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://localhost:5432/dvdrental" userId="postgres" password="postgres"> </jdbcConnection> <!-- Entityの設定 --> <javaModelGenerator targetPackage="com.example.demo.entity" targetProject="src/main/java"> </javaModelGenerator> <!-- Mapper(XML)の設定 --> <!-- <sqlMapGenerator targetPackage="com.example.demo.mapper" targetProject="src/main/resources"> </sqlMapGenerator> --> <!-- Mapper(Java)の設定 --> <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.demo.mapper" targetProject="src/main/java"> </javaClientGenerator> <!-- コードを生成するテーブルを指定 --> <table tableName="actor" modelType="flat"> </table> </context> </generatorConfiguration>
かなり細かい設定ができますので、気になる方は、こちらを参照。
MyBatis Generator Core – MyBatis Generator XML Configuration File Reference
この設定の場合、自分でMapper書きたいなと思えば、簡単に追加することができます。
自動生成したコードを直接触るのはどうなの?とかいうのはあるかと思いますが、
そこはプロジェクト次第だと思います。
コードの自動生成
コマンドプロンプトから
mvn mybatis-generator:generate
この例ではentity配下にActor.java
mapper配下にActorMapper.java
が生成されます。