s2hibernate.daoのdto対応について
s2jsf-exampleのs2daoをs2hibernate.daoに差し替えた版を作成中なのですが、
従業員検索のEmployeeDtoDao.javaの次の記述とSQLファイルの部分をどうしようかなぁと思い。
対応するEmployeeDtoDao_searchEmployeeDtoList.sql
public String searchEmployeeDtoList_ARGS = "dto";public List searchEmployeeDtoList(EmployeeSearchDto dto);
select empno,ename,job,mgr,hiredate,
sal,comm,deptno,d.dname
from emp e left outer join dept d on e.deptno = d.deptno
/*BEGIN*/
where
/*IF dto.empno != null*/and empno = /*dto.empno*/7788/*END*/
/*IF dto.ename != null*/and ename = /*dto.ename*/'SCOTT'/*END*/
/*IF dto.job != null*/and job = /*dto.job*/'ANALYST'/*END*/
/*IF dto.mgr != null*/and mgr = /*dto.mgr*/7566/*END*/
/*IF dto.fromHiredate != null*/and hiredate >= /*dto.fromHiredate*/'1982-12-01'/*END*/
/*IF dto.toHiredate != null*/and hiredate <= /*dto.toHiredate*/'1982-12-31'/*END*/
/*IF dto.fromSal != null*/and sal >= /*dto.fromSal*/1000/*END*/
/*IF dto.toSal != null*/and sal <= /*dto.toSal*/4000/*END*/
/*IF dto.deptno != null*/and deptno = /*dto.deptno*/20/*END*/
/*END*/
次のような記述で動作する様な実装をしてみています。
PROPERTYアノテーションが追加になっています。
// public String searchEmployeeDtoList_ARGS = "dto";
public String searchEmployeeDtoList_PROPERTY = "empno,ename,job,mgr,hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal,deptno";public List searchEmployeeDtoList(EmployeeSearchDto dto);
PROPERTYアノテーションは、基本的にはdtoのプロパティをカンマ区切りで記述していきます。
A)演算子が"="の条件の場合
「empno,ename,job,mgr」と最後の「deptno」の4つに関しては、
それぞれ、s2daoの「/*IF dto.empno != null*/and empno = /*dto.empno*/7788/*END*/」の様にnullでない場合、
「empno = dto.empno」の様なイメージで検索条件に含めます。
B)ひとつのエンティティdtoのプロパティに、2つ以上の検索条件dtoのプロパティをマッピングするの条件の場合
「hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal」に関しては、
それぞれ「[エンティティのdtoのプロパティ名] [演算子] [検索条件のdtoのプロパティ名]」の形式で記述して、
これも、検索条件dtoのプロパティの値がnullでない場合、検索条件に含める動きにしようと考えています。
※検索条件に含めた条件は、すべてandでつなげます。
あと、次のような記述も予定しています。
C)ひとつのエンティティdtoのプロパティに、1の検索条件dtoのプロパティをマッピングするの条件の場合
この場合、 B) の[検索条件のdtoのプロパティ名]を省略できます。
「[エンティティのdtoのプロパティ名] [演算子] [検索条件のdtoのプロパティ名(省略可能)]」
次の「ename like」の様な記述の方法をイメージしています。
// public String searchEmployeeDtoList_ARGS = "dto";
public String searchEmployeeDtoList_PROPERTY = "empno,ename like,job,mgr,hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal,deptno";public List searchEmployeeDtoList(EmployeeSearchDto dto);
ちなみに、いまいま版は、CVSにあげてあります。