🌟

MyBatis GeneratorでCOUNT関数の引数を * から差し替える

2023/04/06に公開

高速化出来る場合に実施します。DB次第で速くなったり遅くなったり効果が無かったりするはずです。
MySQL 8.xでは多少速くなりました。

生成SQL

select count(id) from sample;

ソースコード

SampleMapper.count(c ->
  c.count(SampleDynamicSqlSupport.id)       // 差し替える列名
   .from(SampleDynamicSqlSupport.sample)    // テーブル指定(冗長)
);

余談
型付けがあるのでMyBatis GeneratorのおかげでO/Rマッピングの安全性(型の一致)が高まっている印象はありますが、SQLで書く場合と比べてやはり記述形式が冗長です。
以前with的なコードをJavaで書けるようにしたので、その方式を使って冗長な情報(this的な文脈情報)は消去したい所です。

冗長性を排除したい場合

SampleMapper.count(c ->
  MapperSupport.with(new SampleDynamicSqlSupport(),
    s -> 
      c.count(s.id)       // 差し替える列名
       .from(s.sample)    // テーブル指定(冗長)
  )
);

Discussion