ソフトウェアエンジニアの日常の雑記

日々思ったことをまとめます

MyBatisが色々てんこ盛りになっていい感じになっている件

本家はこちら

久しぶりにSpringBootの環境構築をやろうかと思い、ORMをどうするか選定していたところ、MyBatisが結構進化していたので、メモ。

MyBatis3DynamicSql

こんな感じでかけます。

        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 = &lt;@p name=&quot;param.id&quot; /&gt;

&lt;pre&gt;&lt;code&gt;こんな感じでかける。

from句とかを別のftlファイルにして、includeして使うことも可能です。


## Thymeleaf Template
Doma2とかでやっている2WaySQLがThymeleaf Templateで実現している。Doma2より書き方は野暮ったいけど、一応2waySQLはできる。

&lt;/code&gt;&lt;/pre&gt;

SELECT * FROM names
  WHERE 1 = 1
  /&lt;em&gt;[# th:if=&quot;${not #lists.isEmpty(ids)}&quot;]&lt;/em&gt;/
    AND id IN (/&lt;em&gt;[# mb:p=&quot;ids&quot;]&lt;/em&gt;/ 1 /&lt;em&gt;[/]&lt;/em&gt;/)
  /&lt;em&gt;[/]&lt;/em&gt;/
  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