🌊
javaでwith(obj)的な事をする
発想は超簡単です。関数型インターフェース使うだけです。
使い方
MapperSupport.with(anyObj, (obj -> {
return obj.getId();
});
staticフィールドを使いたい場合(前回の記事でMyBatis使ったコードの煩雑性を軽減したかったので)
MapperSupport.with(new AnyClass(), (obj -> {
return obj.id; // これは警告出ます、staticフィールドへの直接アクセスである場合
});
前回の記事を置き換えたコードです。
public List<History> findLaterHistory() {
return historyMapper.selectMany(
MapperSupport.with(new HistoryDynamicSqlSupport(), (s ->
select(
s.id,
s.name,
max(s.updated) // ここが重要
)
.from(s.history)
.groupBy(s.name)
.build()
.render(RenderingStrategies.MYBATIS3)
)
);
}
with定義クラスです。
import java.util.function.Function;
public class MapperSupport {
public static <T, R> R with(T obj, Function<T, R> f) {
return f.apply(obj);
}
}
Discussion