isami100のSwingin' Seasar日記

2004-07-08

EmployeeDaoの作成

SwingS2上で直接扱えるようになって、ますますS2が楽しくなってきました。

今日は元に戻って(?)Daoの作成(もちろんS2Daoで)。その前に、Employeeの定義を修正。

Employee.java(変更箇所のみ)

    private byte[] password;
    private String dummy;
:(略)
    public byte[] getPassword() {
        return this.password;
    }
    public void setPassword(byte[] password) {
        this.password = password;
    }
    public String getDummy() {
        return this.dummy;
    }
    public void setDummy(String dummy) {
        this.dummy = dummy;
    }
    public String getDname() {
        return this.department.getDname();
    }

    public String getLoc() {
        return this.department.getLoc();
    }

赤い部分を削除して青い部分を追加。Departmentのプロパティに対する透過的なgetterの追加です。これがないと、S2UnitEXCELを使ったテストができないのと、バウンダリでのアクセス面倒になりそうなので。

次はDaoの作成。S2Daoを使うのでインタフェースの定義のみ。

EmployeeDao.java
package s2study.app.employeeref.dao;

import java.util.Date;
import java.util.List;
import s2study.app.entity.Employee;

public interface EmployeeDao {
    public Class BEAN = Employee.class;
    public String getEmployees_ARGS =
        "empNoFrom, empNoTo, empName, hireDateFrom, hireDateTo, salaryFrom, salaryTo";
    List getEmployees(
        Number empNoFrom,
        Number empNoTo,
        String empName,
        Date hireDateFrom,
        Date hireDateTo,
        Number salaryFrom,
        Number salaryTo);
}

SQLはこんな感じ。これをそのままHSQLDBのDatabase Managerのコマンド入力欄にペタッと貼り付けてSQLが正しいことを確認。

EmployeeDao_getEmployees.sql
SELECT emp.*, dept.dname dname_0, dept.loc loc_0 FROM emp, dept
WHERE
  emp.deptno = dept.deptno
  /*IF empNoFrom != null*/     and emp.empno >=    /*empNoFrom*/7500/*END*/
  /*IF empNoTo != null*/       and emp.empno <=    /*empNoTo*/7900/*END*/
  /*IF empName != null*/       and emp.ename like  /*empName*/'%A%'/*END*/
  /*IF hireDateFrom != null*/  and emp.hiredate >= /*hireDateFrom*/'1980-09-01'/*END*/
  /*IF hireDateTo != null*/    and emp.hiredate <= /*hireDateTo*/'1981-09-01'/*END*/
  /*IF salaryFrom != null*/    and emp.sal >=      /*salaryFrom*/1500/*END*/
  /*IF salaryTo != null*/      and emp.sal <=      /*salaryTo*/2500/*END*/
ORDER BY
  emp.empno

ところで、Daoは画面(サービス)毎に作るのがいいのか、それとも対応するEntity毎に作ればいいのかどっちなんだろう。あるEntityに関連しているDaoは1つにまとまっていた方がよい気もするし、各サービスに対応して存在してもよい気もするし。(今回のようなDaoはかなりサービスと強い関連があるので後者でしょうか)うーん。

higayasuohigayasuo2004/07/08 17:50DaoはEntityごとに作るのを推奨してます。S2DaoのBEANアノテーションはその考えを暗示(?)しています。1つのDaoで中心となるEntityは1つ。

isami100isami1002004/07/09 12:35なるほど。確かにそのほうがメンテも1箇所で済みますね。

CassandraCassandra2011/09/30 14:14Essays like this are so irpmotant to broadening people's horizons.

ermpirhxermpirhx2011/10/02 00:06dRZGRQ <a href="http://mpamkiivbejw.com/">mpamkiivbejw</a>

mppwlrntwmppwlrntw2011/10/02 20:438Lmbsj , [url=http://ylwubtiafsvf.com/]ylwubtiafsvf[/url], [link=http://ixhojtxvdtwx.com/]ixhojtxvdtwx[/link], http://xjyxvchefbcj.com/

rimkonerrimkoner2011/10/03 20:34WjhFZb <a href="http://ngqgbbugxlfj.com/">ngqgbbugxlfj</a>

cxnxivcxnxiv2011/10/06 02:22CkgsE3 , [url=http://bbzqguoowqrm.com/]bbzqguoowqrm[/url], [link=http://kvflkacbdduh.com/]kvflkacbdduh[/link], http://mudbogmwjpdr.com/