[Seasar-user:2450] Re: S2Dao1.0.28リリース
Hideaki Maekawa
teufelj
2005年 7月 28日 (木) 15:56:04 JST
ちょうどSQLアノテーションを使う機会がありましたので
現在試用中です(本当はEA1でやるつもりだったのですが)
完全にSQLファイル互換なんですね。これは嬉しいです。
これで、SQLファイルは使われなくなるかも。少なくとも
私は使わなくなります。
ドキュメントのpatchを作ってみましたので、よろしければ
お使いください。
*** doc\old\s2dao.html
--- doc\new\s2dao.html
**************
*** 48,53
<li><a href="#DefMethod">メソッドの定義</a></li>
<li><a
href="#NoPersistentPropsAnnotation">NO_PERSISTENT_PROPSアノテーション</a></li>
<li><a
href="#PersistentPropsAnnotation">PERSISTENT_PROPSアノテーション</a></li>
</ul>
<li type="circle"><a href="#diconfile">diconファイル</a></li>
<li type="circle"><a href="#SQLfile">SQLファイル</a></li>
--- 48,54 -----
<li><a href="#DefMethod">メソッドの定義</a></li>
<li><a
href="#NoPersistentPropsAnnotation">NO_PERSISTENT_PROPSアノテーション</a></li>
<li><a
href="#PersistentPropsAnnotation">PERSISTENT_PROPSアノテーション</a></li>
+ <li><a href="#SqlAnnotation">SQLアノテーション</a></li>
</ul>
<li type="circle"><a href="#diconfile">diconファイル</a></li>
<li type="circle"><a href="#SQLfile">SQLファイル</a></li>
**************
*** 356,361
<li><a href="#QueryAnnotation">QUERYアノテーション</a></li>
<li><a href="#NoPersistentPropsAnnotation">NO_PERSISTENT_PROPSアノテーション</a></li>
<li><a href="#PersistentPropsAnnotation">PERSISTENT_PROPSアノテーション</a></li>
</ul>
<h5><a name="BeanAnnotation">BEANアノテーション</a></h5>
--- 357,363 -----
<li><a href="#QueryAnnotation">QUERYアノテーション</a></li>
<li><a href="#NoPersistentPropsAnnotation">NO_PERSISTENT_PROPSアノテーション</a></li>
<li><a href="#PersistentPropsAnnotation">PERSISTENT_PROPSアノテーション</a></li>
+ <li><a href="#SqlAnnotation">SQLアノテーション</a></li>
</ul>
<h5><a name="BeanAnnotation">BEANアノテーション</a></h5>
**************
*** 437,442
<pre>public static final String insert_PERSISTENT_PROPS = "deptno";</pre>
<p>上記のように指定すると、insertメソッドで、プライマリーキー、versionNo、timestampのプロパティに加えて、
PERSISTENT_PROPSアノテーションで指定したプロパティが永続化の対象になります。</p>
<h4><a name="diconfile">diconファイル</a></h4>
<p>diconファイルはDaoをコンテナにコンポーネント登録します。Dao機能を使用するには、登録したDaoに対して、AOPを適用する必要があります。
--- 439,497 -----
<pre>public static final String insert_PERSISTENT_PROPS = "deptno";</pre>
<p>上記のように指定すると、insertメソッドで、プライマリーキー、versionNo、timestampのプロパティに加えて、
PERSISTENT_PROPSアノテーションで指定したプロパティが永続化の対象になります。</p>
+
+ <h5><a name="SqlAnnotation">SQLアノテーション</a></h5>
+ <p>バージョン1.0.28より、SQLアノテーションを使用することが可能です。機能はSQLファイルと同様で、アノテーションにてSQL及びSQLコメントを使用することが可能です。</p>
+ <p>SQLアノテーションに命名規則があります。</p>
+ <ul>
+ <li>SQLファイルとDaoに定義したメソッドの関連付け</li>
+ <p>SQLアノテーションとDaoに定義したメソッドの関連付けをするには、SQLアノテーションを以下の形式にする必要があります。</p>
+ <p>- <span class="italic">メソッド名</span>_SQL</p>
+ examples.dao.EmployeeDao#getAllEmployees()に対応するSQLアノテーションは以下のようになります。
+ <pre>public static final String getAllEmployees_SQL = "SELECT
emp.*, dept.dname dname_0, dept.loc loc_0 FROM emp, dept
+ WHERE emp.deptno = dept.deptno ORDER BY emp.empno;";</pre>
+ <li>複数DBMS対応</li>
+ <p>DBMSごとに使用するSQLアノテーションを指定することができます。
+ どのDBMSを使っているのかはjava.sql.DatabaseMetadata#getDatabaseProductName()に応じて、S2Daoが自動的に判断しています。
+ S2DaoのほうでDBMSごとにサフィックスを決めているので、SQLアノテーションにサフィックスを追加します。
+ 例えばオラクルの場合、サフィックスはoracleなので、「getAllEmployees_oracle_SQL」というSQLアノテーションになります。</p>
+ DBMSとサフィックスの関係は以下の通りです。
+ <table class="main" border="1">
+ <tbody><tr align="center" bgcolor="#d1f3f4">
+ <th scope="col">DBMS</th>
+ <th scope="col">サフィックス</th>
+ </tr>
+ <tr>
+ <td>Oracle</td>
+ <td>oracle</td>
+ </tr>
+ <tr>
+ <td>DB2</td>
+ <td>db2</td>
+ </tr>
+ <tr>
+ <td>MSSQLServer</td>
+ <td>mssql</td>
+ </tr>
+ <tr>
+ <td>MySQL</td>
+ <td>mysql</td>
+ </tr>
+ <tr>
+ <td>PostgreSQL</td>
+ <td>postgre</td>
+ </tr>
+ <tr>
+ <td>Firebird</td>
+ <td>firebird</td>
+ </tr>
+ <tr>
+ <td>HSQL</td>
+ <td>hsql</td>
+ </tr>
+ </tbody></table>
+ </ul>
+
<h4><a name="diconfile">diconファイル</a></h4>
<p>diconファイルはDaoをコンテナにコンポーネント登録します。Dao機能を使用するには、登録したDaoに対して、AOPを適用する必要があります。
Seasar-user メーリングリストの案内