tinyorm で 複雑なクエリをマッピングする
GROUP BY したり JOIN する複雑なクエリは SQL を直接書くポリシー。
ResultSet をラムダ式内で扱う。
db.executeQuery(
"SELECT count(*) as cnt FROM item GROUP BY group_id",
rs -> {
List<Long> result = new ArrayList<>();
while (rs.next()) {
result.add(rs.getLong("cnt"));
}
return result;
});
Stream API と拡張 for ⽂の関係
Stream API の出現で「forEach を使えば for ⽂不要」という話題
もあるが lambda の中でチェック例外を扱うよりは、拡張 for ⽂
にしてチェック例外はフレームワークに任せた⽅が可読性が⾼い
こともある
Web アプリはチェック例外も Internal Server Error で処理してお
しまい、というケースが多いので、現在は Stream API ⼀辺倒に
はならずに拡張 for ⽂も使ってる
with lombok
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
}
Vanilla Java
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
}
@SneakyThrows
チェック例外を⾮チェック例外にして投げる。
Internal Server Error を返すしかないような例外はチェックせず SneakyThrows を使う。
ただ最近は SneakyThrows を使わず throws 節を宣⾔するのがトレンドになってきた。
@POST("/upload")
@SneakyThrows
public WebResponse upload(@UploadFile("file") Part file) {
String body = IOUtils.toString(
file.getInputStream(), "UTF-8");
return this.renderText(body);
}
lombok.val
final なローカル変数を短く宣⾔できる。使おうかと思ったが、IntelliJ IDEA が未対応なので断念。
Eclipse でもエラーになるという噂がちらほら。
ただ、今となってはダイヤモンド演算⼦で⼗分とも思う。
import lombok.val;
public class Main {
public void main(String... args) {
// lombok.val
val example = new ArrayList<String>();
// diamond operator
final ArrayList<String> example2 = new ArrayList<>();