本家はこちら
久しぶりにSpringBootの環境構築をやろうかと思い、ORMをどうするか選定していたところ、MyBatisが結構進化していたので、メモ。
MyBatis3DynamicSql
- XMLが不要になる
- コード量が小さくなる
- JavaでタイプセーフにSQLがかける(JOOQみたい)
- https://mybatis.org/generator/quickstart.html
こんな感じでかけます。
List<TableCode> records = mapper.selectByExample()
.where(id, isEqualTo(3))
.build()
.execute();
List<TableCode> records = mapper.selectByExample()
.where(id, isEqualTo(3))
.or(description, isLike("f%"))
.build()
.execute();
List<TableCode> records = mapper.selectByExample()
.where(id, isLessThan(10), and(description, isEqualTo("foo")))
.or(description, isLike("b%"))
.orderBy(id.descending())
.build()
.execute();
JOOQみたいに、タイプセーフでSQLがかけるのはとてもすごい進化だと思います。
FreeMarker Tempalte
前に書いたとおりのFreeMarker Templateは健在。XMLがいやでFreeMarkerにしたけど、複雑なクエリはやはりJavaコードじゃなくて、素のSQLの方がいいイメージなので、継続して使用します。
select * from sample_table where id = <@p name="param.id" /> <pre><code>こんな感じでかける。 from句とかを別のftlファイルにして、includeして使うことも可能です。 ## Thymeleaf Template Doma2とかでやっている2WaySQLがThymeleaf Templateで実現している。Doma2より書き方は野暮ったいけど、一応2waySQLはできる。 </code></pre> SELECT * FROM names WHERE 1 = 1 /<em>[# th:if="${not #lists.isEmpty(ids)}"]</em>/ AND id IN (/<em>[# mb:p="ids"]</em>/ 1 /<em>[/]</em>/) /<em>[/]</em>/ ORDER BY id
MyBatis Migrate
これは前からあったみたいなんだが、Flywayの陰に隠れて知らなかった。 機能的には十分っぽいので、試してみる。
詳細 => https://mybatis.org/migrations/
Mybatis Log Plugin (Intellijのみ)
これがあると、条件分岐があって、引数のバインドが全部終わったSQLを出力してくれるので、デバッグに便利です。 必需品かと思います。(Domaは標準でありますが)
https://plugins.jetbrains.com/plugin/10065-mybatis-log-plugin