Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@chibat
Last active April 7, 2018 16:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chibat/9f0a54dd9b12dd6e5d9639ab48cb3e8e to your computer and use it in GitHub Desktop.
Save chibat/9f0a54dd9b12dd6e5d9639ab48cb3e8e to your computer and use it in GitHub Desktop.
Doma 3でJava 11のRaw String Literalsに対応するとしたら

sql 要素に SQL の取得元を enum で指定する案

Raw String Literals に対応した場合、SQL取得は内部文字列、外部ファイル、自動生成の3モードとなる。   sql 要素に enum で STRING, FILE, AUTO の3モードいずれかを指定するようにする。デフォルトは、STRING

Select の場合

SQLはアノテーションから読む

@Select(sql = STRING, value = `select * from emp`)
Emp select();

エイリアスとして

@Select(`select * from emp`)
Emp select();

SQLはファイルから読む

@Select(sql = FILE)
Emp select();

@Select で sql=AUTO を指定した場合

コンパイルエラー(SelectにSQL自動生成がないため)

@Select(sql = AUTO)
Emp select();

またはエラーにせず、Select のSQL自動生成(ユニークキー指定の1件検索のみ)をサポートする

@Select(sql = AUTO)
Emp select(Integer id);

メソッド引数名は、エンティティのフィールド名に存在するものである必要がある。
生成されるSQLは、

select /*%expand*/* from emp where id = /* id */1

これが実装されるとアノテーションの組み合わせによりコンパイルエラーにするパターンがなくなる。

Insert の場合

SQLはアノテーションから読む

@Insert(sql = STRING, value = `insert into ...`)
int insert(Emp e);

エイリアスとして

@Insert(`insert into ...`)
int insert(Emp e);

SQLはファイルから読む

@Insert(sql = FILE)
int insert(Emp e);

SQLは自動で組み立てる

@Insert(sql = AUTO)
int insert(Emp e);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment