[Seasar-user:381] Re: メールアーカイブ

B isid.co.jp Yasuo Higa higa
2004年 3月 2日 (火) 16:27:15 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:380] Re: メールアーカイブ" において、
   "Masataka Kurihara <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> 栗原まさたかです。
> 
>   最近もハンドルってあるんでしょうか(^^)。
> 
自由で良いみたい。

>   おかげさまでリストを流し読み終えたところですが、い
> まのSeasar2の流れは年明けてからなんですね。すごくタイ
> ミングがあってうれしいです。ちょうど IoCコンテナ探し
> もしくは自作検討をしていたところです。
> 
>   いま、とっても知りたいのは、AOPで実装するというDAO
> の仕組みです。自分なりに作ろうかと思っていた像がうす
> らぼんやりとあったので、ひがさんのアプローチを知りた
> い〜。
> 
DAOの仕様は、インターフェースで定義、実装はXML、
両者をAOPで結びつけようというわけです。
XML部分は、Sqlet(http://homepage3.nifty.com/seasar/doc/nazuna-sqlet.html)
がベースになってます。

interface EmployeeDao {
  public List getEmployees();
  public Employee getEmployeeByEmpno(int empno);
  public List getEmployeeBySalaryAndJob(
    BigDecimal salary, String job);
  public int updateEmployee(Employee emplyoee);
}

EmployeeはJavaBeans。コードは省略。

EmployeeDao.xml
<dao>
  <view name="EmployeeView">
    SELECT ... FROM emp
  </view>

  <query name="getEmployees">
    <resultSetHandler class="BeanListHandler">
      <property name="beanClassName">'hoge.entity.Employee'</property>
    </resultSetHandler>
    ${EmployeeView}
  </query>

  <query name="getEmployeeByEmpno">
    <arg name="empno"/>
    <resultSetHandler class="BeanHandler">
      <property name="beanClassName">'hoge.entity.Employee'</property>
    </resultSetHandler>
    ${EmployeeView}
    WHERE empno = ?{empno}
  </query>

  <query name="getEmployeeBySalaryAndJob">
    <arg name="salary"/>
    <arg name="job"/>
    <resultSetHandler class="BeanListHandler">
      <property name="beanClassName">'hoge.entity.Employee'</property>
    </resultSetHandler>
    ${EmployeeView}
    <where>
      <and condition="salary ge 0">salary ge ?{salary}</and>
      <and condition="job is not null">job = ?{job}</and>
    </where>
  </query>

  <query name="updateEmployee">
    <arg name="employee"/>
    UPDATE emp SET empno = ?{employee.empno}, ...
    WHERE empno = ?{employee.empno}
  </query>
</dao>

コンポーネントの定義
<component class="hoge.dao.EmployeeDao">
  <aspect>
    <component class="org.seasar.framework.dao.advices.DaoAdvice">
      <!-- DataSourceコンポーネントの名前。他で定義済み -->
      <arg>jdbc/default</arg>
      <!-- XMLのリソースパス -->
      <arg>'hoge/dao/EmployeeDao.xml'</arg>
    </component>
  </aspect>
</component>

まだ、素案なのでいろいろ突っ込んでください。
ResultSetHandlerの仕様は、DbUtilsにあわせようと思ってます。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



Seasar-user メーリングリストの案内