本家はこちら
久しぶりに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の方がいいイメージなので、継続して使用します。
sample.ftl
select
*
from
sample_table
where
id = <@p name="param.id" />
こんな感じでかける。
from句とかを別のftlファイルにして、includeして使うことも可能です。
Thymeleaf Template
Doma2とかでやっている2WaySQLがThymeleaf Templateで実現している。Doma2より書き方は野暮ったいけど、一応2waySQLはできる。
SELECT * FROM names
WHERE 1 = 1
/*[# th:if="${not #lists.isEmpty(ids)}"]*/
AND id IN (/*[# mb:p="ids"]*/ 1 /*[/]*/)
/*[/]*/
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
最後に
タイプセーフでSQLかけるし、2WaySQLあるし、Migrateあるし、なんかMyBatisで全部OKなんじゃないかとおもいました。おそらくThymeleafは