→データベース関連

#contents

*S2JDBC [#v6b79245]
-スタンドアロンアプリでトランザクションを形成したいとき
--componentタグの中にaspect タグを書きそこにrequiredTxなどを書いておくとトランザクションが有効になる
--独自ファイル(たとえばbean.diconなど)作ってapp.diconからincludeするのがおすす
め
 (例)
  <component name="sample" class="jp.co.Sample">
       <aspect>j2ee.requiredTx</aspect>
  </component>
--指定したクラスのすべてのメソッドがトランザクション対象になる。
--pointCutタグを使うとメソッドを特定できる
--このとき
 [ESSR0046]コンポーネント(j2ee)が見つかりません
と言われるならば
 <include path="j2ee.dicon"/>
をapp.diconに追加すべし

-org.seasar.framework.container.TooManyRegistrationRuntimeException が発生するとき
  [ESSR0045]interface javax.sql.XADataSourceに複数のコンポーネント
 (org.seasar.extension.dbcp.impl.XADataSourceImpl, 
 org.seasar.extension.dbcp.impl.XADataSourceImpl)が登録されています
--jdbc.diconに <component name="xaDataSource"> のタグが複数あるとこれになる。コメントタグの付け忘れ、消し忘れを確認

-jdbc.diconでコネクション・プーリングやタイムアウトの設定ができる
 <component name="connectionPool"
   class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
   <property name="timeout">600</property> ←秒数
   <property name="maxPoolSize">10</property>
   <property name="allowLocalTx">true</property>
   <destroyMethod name="close"/>
 </component>

-[[S2JDBC>http://s2container.seasar.org/2.4/ja/s2jdbc_abstract.html]]
--[[チュートリアル>http://s2container.seasar.org/2.4/ja/s2jdbc_tutorial.html]]

-ビューの扱い
--S2JDBC-Genでエンティティを生成できるのはテーブルのみで、ビューのエンティティは作られない。
--ではどうするかというと、Viewに対しては Dtoを作ってSQL指定で対応する方法がある
 public class ViewTestDtoService extends AbstractService<ViewTestDto> {
   public List<ViewTestDto> getAll(){
        List<ViewTestDto> results = jdbcManager.selectBySql(
                       ViewTestDto.class, "select * from VIEW_TEST ")
                       .getResultList();
        return results;
     }
 }
--ビューに限らず、複雑なSELECT文を使う場合も同様
--SQLファイルからDtoクラスを生成する機能がS2JDBC-Genにある模様

-S2AbstractServiceについて
--http://d.hatena.ne.jp/dewa/20080706/1215308304
--http://d.hatena.ne.jp/dkfj/20090306/1236301619
--Serviceクラスは、Entityクラスと1:1で対応させる。
--Serviceクラスは、Entityに対する処理以外はやらない。
--Serviceクラス以外は、jdbcManagerを生で使用しない。(Actionにとか)
--AbstractServiceを作成し、DBに関する共通処理を集約させる(削除フラグとか更新
日とか)
--[[続・SAStruts + S2JDBCのアーキテクチャ>http://d.hatena.ne.jp/dewa/20080606#1212716896]]

-[[S2JDBCとS2Daoのいけてないところ>http://blog.tsukuba-bunko.jp/ppoi/archives/2008/06/s2jdbcs2dao.html]] 
--S2DBCP は,ローカルトランザクションの内部では,Connection を要求ごとに新規に取り直すような動きをします。
--つまり,手動での JDBC 操作の部分と,S2JDBC/S2Dao の呼び出し部分では,それぞれ別々の Connection が使用されてしまう訳です。
--当然,トランザクションもばらばらになってしまうため,事実上一つのトランザクションで処理を行うということができなくなります。

-トランザクション管理は[[S2Tx>http://s2container.seasar.org/2.4/ja/tx.html]]を使うとのこと
--デフォルトだとコンポーネントが例外をスローした場合はトランザクションをロールバックしますが、発生した例外に応じてトランザクションをコミットするかロールバックするかを指定することもできます。
--addCommitRule(Class)メソッドを使用すると、トランザクションをコミットする例外を指定することができます。
--addRollbackRule(Class)メソッドを使用すると、トランザクションをロールバックする例外を指定することができます。


-[[S2JDBCのトランザクション>http://kanon986.blog95.fc2.com/blog-entry-1.html]]
--SAStrutsと組み合わせれば、デフォルトでAction単位でトランザクションを制御してくれます。
--参考:[[SAStrutsにおけるトランザクション>http://sastruts.seasar.org/featureReference.html#Transaction]]

-MS製のJDBCドライバでSQL Server 2005 Expressにつなぐときのjdbc.diconの記述例
  <component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
    <property name="driverClassName">
      "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        </property>
        <property name="URL">
        "jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;databaseName=hogeDB"
        </property>
        <property name="user">"sa"</property>
        <property name="password">"hogehoge"</property>
    </component>
-統合認証で接続する場合のjdbc.dicon
 <component name="xaDataSource"
      class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
   <property name="driverClassName">
      "com.microsoft.sqlserver.jdbc.SQLServerDriver"
   </property>
   <property name="URL">
   "jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;databaseName=hogeDB;integratedSecurity=true"
   </property>
 </component>

-JDBCドライバのファイルはsqljdbc4.jarだけあれば良い模様。プロジェクトのlibフォルダに置いておくのがいろんな意味で無難と思われる。(外部に置こうとするといろんな局面でJDBCドライバがClassNotFoundをくらう)

-jdbc.diconで統合認証を使う場合はJDBCドライバに同梱されているsqljdbc_auth.dllをpathの切ってあるところに置く必要あり


*iBATIS [#a46cecb6]
-[[Developer Guid>http://ibatisnet.sourceforge.net/DevGuide.html]]
-[[Quick Start Guide>http://opensource.atlassian.com/confluence/oss/display/IBATIS/Quick+Start+Guide]]
-[[ASP.NETで実践するiBATIS>http://www.atmarkit.co.jp/fdotnet/special/ormap02/ormap02_01.html]]
-「iBATIS.NET」は「SQL Maps=DataMapper」と「DAO Framework=DataAccess」という2つのフレームワークから構成される
--SQL Maps:XMLに記述したSQLの実行結果をマッピングする
--DAO Framework:DI機能。DBアクセスとビジネスロジックの依存性を下げる。
--ADO.NETのデータプロバイダに依存する
--2つのフレームワークはそれぞれ単体で使用可能

-[[iBATIS.NETによるO/Rマッピング(SQL Maps編):http://codezine.jp/a/article.aspx?aid=112]]
-[[iBATIS.NETによるO/Rマッピング(DAO Framework編):http://codezine.jp/a/article.aspx?aid=113]]

**インストール [#rea89cd6]
-http://ibatis.apache.org/ から最新版を落としてくる
-インストーラなどは無い。展開したものを適当なフォルダにコピーする
-VS.NETから以下のdllを参照する
--IBatisNet.Common.dll
--IBatisNet.DataMapper.dll (SQL Maps使用時)
--IBatisNet.DataAccess.dll (DAO Framwork使用時)

**使い方 [#ye3cbeb6]
-マッピング対象のオブジェクトとなるクラスを定義する
-マッピング用XMLを作り、その中の所定のタグにSQLを書く
-管理ファイルSqlMap.configにマッピング用XMLを登録する


*NHibernate [#ieccfe1e]
-SQL記述の必要なし
-[[NHibernateによるO/Rマッピング:http://codezine.jp/a/article.aspx?aid=156]]
--http://wiki.nhibernate.org/display/NH/Home


*その他 [#a1fc340a]
-[[Gentle.NET>http://www.mertner.com/confluence/display/Gentle/Home]]
-[[SQLを記述しないO/RマッピングツールTorque:http://www.thinkit.co.jp/free/article/0606/13/4/index.html]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS