2008 Spring 早分かり S2Dao Seasar プロジェクトコミッタ ( 株 ) エルテックス 大中浩行 2008 Spring Copyright 2004-2008 The Seasar Foundation and the others. All rights reserved. 1
アジェンダ はじめに S2Dao とは? S2Dao に必要なもの S2Dao を動かしてみる 挿入 検索 更新 複雑な検索 (2WaySQL) 削除 2
自己紹介 大中浩行 Seasar プロジェクトコミッタ ( 株 ) エルテックス SI 事業部 http://www.fieldnotes.jp/d/ Twitter: @setoazusa Working Effectivelry With Legacy Code 読書会主催 5/31( 土 ) に第 1 回を開催します http://fieldnotes.sytes.net/~azusa/wiki/?legacyc t t t/ / iki/?l ode http://groups.google.co.jp/group/legacy-code / /l 3
S2Daoとは? S2Dao とは? 4
S2Daoとは? 1. 実装コードを書かずに 2. SQL を直接書ける 3. O/R マッパ 5
実装コードを書かずに 冗長なJDBCのコードの組み立てから解放されます! Dao は Java のインターフェースだけ ( 実装クラス不要 ) @S2Dao(bean=Employee.class) public interface EmployeeDao{ } public List<Employee> getallemployees(); 6
SQLを直接書ける Daoが使うSQLファイルを ツールから直接実行可能 (2-WaySQL) SELECT * FROM EMPLOYEE WHERE empno = /*empno*/7369 7
ResultSet から JavaBean への詰め替えも O/R マッパ PreparedStatement t tへのパラメータ設定も S2Daoがやってくれます 8
S2Dao に必要なもの 必要なもの 9
Dao のインターフェース 必要なもの テーブル ResultSet t に対応する Java オブジェクト (JavaBean/Entity/Dto) SQL ファイル Seasar の設定 Seasar2.4 の SMART Deploy に従えば設定レス 10
動かしてみる 動かしてみる 11
テーブル Employee テーブル カラム名 型 PK EMPNO numeric(4) ENAME varchar(10) JOB varchar(9) MGR numeric(7,2) HIREDATE Date SAL numeric(7,2) COMM numeric(7,2) DEPTNO numeric(2) TIMESTAMP timestamp 12
Entity @Bean(table = "EMPLOYEE") public class Employee { @Column("EMPNO") public Integer empno; @Column("EMPNO") public String ename; @Column("JOB") public String job; @Column("MGR") public Integer mgr; @Column("HIREDATE") public Date hiredate; @Column("SAL") public BigDecimal sal; @Column("COMM") public BigDecimal comm; @Column("DEPTNO") public Integer deptno; @Column("TIMESTAMP") public Timestamp timestamp; public String tostring() { return org.apache.commons.lang.builder.tostringbuilder.reflectiontostring(this); commons reflectiontostring(this); } Seasar } Conference 13
Dao @S2Dao(bean = Employee.class) public interface EmployeeDao { } 14
追加 public int insert(employee employee); 15
検索 // 全検索 public List<Employee> getallemployees(); // 主キーで検索 @Query("EMPNO =?") public Employee getemp(int empno); 16
更新 public int update(employee p employee); 17
@Arguments( { "job", "deptno" }) public List<Employee> getemployeebyjobanddeptno (String job, Integer deptno); 複雑な検索 18
SQLファイル SELECT * FROM EMPLOYEE /*BEGIN*/WHERE /WHERE /*IF "aaa".equals(job)*/ JOB = /*job*/'clerk' /*END*/ / /*IF deptno!= null*/ AND DEPTNO =/*deptno*/20 /*END*// /*END*/ / 19
SQLファイルの置き場 ファイル名は Daoのクラス名 _ メソッド名.sql この場合 EmployeeDao_getEmployeeByJobAndDeptno.sql l t l Eclipse の場合はソースファイルと同じ場所に置く Maven2の場合は src/main/resources / 20
削除 public int delete(employee l employee); // もしくは @Query("EMPNO =?") public int deletebyquery(int empno); 21
S2Dao は まとめ 1. 実装コードを書かずに DaoD はインターフェースのみ 2. SQLを直接書ける 2WaySQLで自由自在 3. O/R マッパ 詰め替え 設定手間いらず 22
ホームページ http://s2dao.seasar.org/ja/index.htmlseasar org/ja/index html 質問は Seasar-User メーリングリストまで More Info https://ml.seasar.org/mailman/listinfo/seasaruser 開発に関する議論はseasar-s2dao-devメーリングリストまで https://ml.seasar.org/mailman/listinfo/seasars2dao-dev 23
おわり ありがとうございました 24