🐡
MyBatis Dynamic SQLとGeneratorでMAX関数を使う
想定通りに動かないかもしれません
一つのテーブルから最終更新日のレコードを取得する例です。
割と調べるのに手間取ったのでキャッシュ的に残しておく判断をしました。
生成SQLクエリ
select ID, NAME, CREATED, max(UPDATED) from history group by NAME
元となるJavaコード
import static org.mybatis.dynamic.sql.SqlBuilder.*; // select() 使うために必要
public List<History> findLaterHistory() {
return historyMapper.selectMany(
select(
HistoryDynamicSqlSupport.id,
HistoryDynamicSqlSupport.name,
max(HistoryDynamicSqlSupport.updated) // ここが重要
.as(HistoryDynamicSqlSupport.updated.name()) // ここも重要(無いと null になる)
)
.from(HistoryDynamicSqlSupport.history)
.groupBy(HistoryDynamicSqlSupport.name)
.build()
.render(RenderingStrategies.MYBATIS3)
);
}
Javaコードにすると見た目が大分煩雑です。MyBatis GeneratorでSQL(O/R)マッピングの恩恵は受けられるのはいいんですが・・・ with(HistoryDynamicSqlSupport, () -> it.history)
とか出来たらもっとシンプルになると思うんですけどね。
Javaコード内でSQLチェックしたい場合は select().getSelectStatement()
で見れます。
Discussion