ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2Dao

SQLの定義は、XMLではなく、すべて外部ファイルにしたいと思います。これまでどおりXMLでも外部ファイルでもできるようにしたいと思います。
<>などの扱いがあるためです。
後、基本的なマッピングは、静的なものとし、動的に条件が
変わる場合は、SQLからJavaのメソッドを呼び出す形にしたいと思います。
静的なマッピング


WHERE empno = /*?{empno}*/7788
動的なマッピング
BEGINとENDで囲まれた部分がhogeメソッドによって書き換えられます。

/*BEGIN hoge*/
WHERE job = 'CLERK' AND deptno = 20
/*END hoge*/
EmploeeDaoImpl.hogeメソッド

void hoge(QueryContext ctx) {
String job = (String) ctx.getArg("job");
Integer deptno = (Integer) ctx.getArg("deptno");
ctx.beginWhere();
ctx.addAnd("job = ?", job, job != null);
ctx.addAnd("deptno = ?", deptno, deptno != null);
ctx.endWhere();
}
QueryContext#addAnd()は3番目の引数がtrueの場合に、
最初の引数で指定した条件が追加されます。
2番目の引数はバインド変数です。
beginWhere()後に最初に追加される場合には、ANDは追加されませんが
最初でない場合には、" AND job = ?"のようにANDが追加されます。
beginWhereからendWhereの間に一度も条件がヒットしない
(job, deptnoがnull)場合、" WHERE "は追加されませんが、
一度でもヒットすると" WHERE "が追加されます。
ロジック的なところは、Javaに任せるが、SQLを組み立てる上で、
めんどくさい部分は、QueryContextが肩代わりするという考えです。