Skip to content

Instantly share code, notes, and snippets.

@nakamura-to
Last active November 5, 2020 21:59
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 nakamura-to/d467760539c2015b03a043fb08be7e82 to your computer and use it in GitHub Desktop.
Save nakamura-to/d467760539c2015b03a043fb08be7e82 to your computer and use it in GitHub Desktop.
Doma 3でJava 11のRaw String Literalsに対応するとしたら

追加するアノテーションを @Sql の1つにする案

Selectの場合

SQLはファイルから読む(暗黙バージョン)

@Select
Emp select();

SQLはファイルから読む(明示バージョン)

@Sql(useFile = true)
@Select
Emp select();

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

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

エラー(アノテーションとファイルのどちらのSQLを使えばわからないので)

@Sql(value = `select * from emp`, useFile = true)
@Select
Emp select();

Insertの場合

前提として @InsertsqlFile 要素は廃止する。

SQLは自動で組み立てる

@Insert
int insert(Emp e);

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

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

SQLはファイルから読む

@Sql(useFile = true)
@Insert
int insert(Emp e);

エラー(アノテーションとファイルのどちらのSQLを使えばわからないので)

@Sql(value = `insert into ...`, useFile = true)
@Insert
int insert(Emp e);

追加するアノテーションを @Sql@SqlFile の2つにする案

Selectの場合

SQLはファイルから読む(暗黙バージョン)

@Select
Emp select();

SQLはファイルから読む(明示バージョン)

@SqlFile
@Select
Emp select();

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

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

エラー(アノテーションとファイルのどちらのSQLを使えばわからないので)

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

Insertの場合

前提として @InsertsqlFile 要素は廃止する。

SQLは自動で組み立てる

@Insert
int insert(Emp e);

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

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

SQLはファイルから読む

@SqlFile
@Insert
int insert(Emp e);

エラー(アノテーションとファイルのどちらのSQLを使えばわからないので)

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

@Select など既存のアノテーションに sql 要素を追加する案

  • Doma2からの互換性は一番高い。
  • SQLを記述できるアノテーションが一目瞭然(sql要素の有無で判断できる)。
  • ユーザーの自作のツールでSQLを抽出するのは少し面倒

Selectの場合

SQLはファイルから読む

@Select
Emp select();

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

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

Insertの場合

SQLは自動で組み立てる

@Insert
int insert(Emp e);

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

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

SQLはファイルから読む

@Insert(sqlFile = true)
int insert(Emp e);

エラー(アノテーションとファイルのどちらのSQLを使えばわからないので)

@Insert(sql = `insert into ...`, sqlFile = true)
int insert(Emp e);
@nakamura-to
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment