Movatterモバイル変換


[0]ホーム

URL:


Uploaded bytripodworks
3,074 views

S2dao Seminar in tripodworks

Embed presentation

O/R マッピングツール  S2Dao  入門 トライポッドワークスセミナー  2007/11/05
JDBCプログラミングの問題点 DB アクセスに関する『定型的』なコードが多くなる DB のレコード( ResultSet )から Java オブジェクトへの詰め替えを手作業でコーディング RDBMS でコーディングに差異が出てしまい、別の RDBMS に乗り換えたときに汎用性が下がる 定型的なコード、単調なコードはミスしやすく、またミスを見つけにくい。 『まさかこんなところが原因ではないだろう…』と見落としがち コネクションのクローズ忘れ トランザクションの掛け忘れ
今までどんな手を打ってきたか ソースコードの自動生成 一部の『できる人』が『自分のため』にやっていた EXCELの定義書もどきから自動生成など 出来上がったコードに修正を加えたときの対処が大変 独自にO/Rマッピング リフレクション(*1)を活用したり、テーブルのメタデータ(*2)を参照するようなライブラリを作成し一定の成果を上げた… 社内だけでしか使われないのでフィードバックが得られにくい メンテナンスできるヒトが限られる (*1) クラスのフィールド、メソッド、およびコンストラクタに関する情報を検出したり、その検出した情報でそのクラスを利用したりできる API 。 (*2) データについてのデータ。あるデータそのものではなく、そのデータに関連する情報のこと。
その他の問題 SQL ツールを使いこなせていない データの参照や操作に sqlplus 、 mysql 、 psql を使っていて生産性を低下させている 『自分用』のデータベース環境がない データベース環境が無い、または構築できないために学習の足かせになっている 外出先や自宅で学習したくても簡単に環境を移動できない なんか最近 SQL を書けないような気がする なぜかデータベースにアクセスする機能を実装する機会がない そもそもこの部分の実装にあまり時間を取られたくない。 後ろに画面周りとかシステム連携とか控えてるんスけど ..
S2Daoでデータベースアクセス(概要)
S2Daoの特長 国産 DI コンテナ Seasar2 の 1 プロジェクトとして開発が進められている O/R マッピングフレームワーク Java のコードをほとんど記述する必要がない (Hibernate のような ) マッピングファイルの作成が不要 DB のカラム名と Java のフィールド名を一致させておけば、大半は自動的にマッピングしてくれる 自動マッピングできない部分は、アノテーションを利用してソースコード中にマッピングを記述できる 単純なアクセス( CRUD )については自動で SQL 発行を行ってくれる 柔軟性が高い 複雑な検索は開発者が別途 SQL を用意できる Java 以外でも使える S2Dao.NET S2Dao.PHP
S2Daoデモのテーブルとデータ サンプルデータは Oracle の scott/tiger データベースです
S2Dao-開発の進め方 テーブルの作成 エンティティ (JavaBeans )の作成 Dao( D ata A ccess O bject )の作成 (必要であれば)検索条件クラスの作成 テストコードの作成
自分専用のデータベース環境を作ろう
H2 Database Engine 開発者にとって扱いやすいデータベース インストールが超簡単 起動が超簡単 ファイルサイズが軽い 可搬性が良い SQL は PostgreSQL 互換(詳細未確認) 学習環境にはうってつけのデータベース
H2 Database Engine-インストールと起動 公式サイトにアクセス http://www.h2database.com/html/frame_ja.html 以下のファイルをダウンロード Version 1.0.60 (2007-10-20) All platforms (zip, 3.7 MB)  Zip ファイルを解凍 h2/bin/h2.bat をダブルクリック Web ブラウザが自動起動し、 H2 コンソール( http://localhost:8082/ )が表示されれば OK
H2 Database Engine-データベースの作成と接続 コンソールの『 JDBC URL: 』に注目 新しい URL で接続したときにデータベースが生成されます。 『 jdbc:h2:~test 』で接続した場合 C:\Documents and Settings にデータベースファイルが生成される( [logonName]test.xxx) 『 jdbc:h2:s2dao-sem 』で接続した場合 h2/bin/ にデータベースファイルが生成される sa/( パスワードなし ) で接続 CREATE USER 文も使えますが開発用の話なので割愛
Execute Query-汎用SQLクライアント JDBCドライバ経由で接続する汎用SQLクライアントです 検索結果のタブ表示 SQLコマンド履歴 関連をダイアグラム表示 参考: Execute Query http://executequery.org/ CSE よりエキスパート向き。私も練習中です
S2Dao についてもっと  kwsk  (詳しく)
O/Rマッピングとは? Object / Relational Mappingの略称 オブジェクト指向言語で扱う「オブジェクト」と「リレーショナルデータベース(RDB)のレコード」をマッピング(対応付け)すること オブジェクトへのデータ取得やオブジェクトデータの永続化といった処理を透過的に行うことができるようになる機構
O/Rマッピングとは? インピーダンスミスマッチの解決策として登場
Daoパターン D ata  A ccess  O bjectの略 依存関係を疎にするための考え方 永続ストレージ(DB)にアクセスする処理を、本来行うべき処理から離す プレゼンテーション xxAction ビジネスロジック xxLogic Dao xxDao DTO (DataTransferObject)
Seasar概要 軽量DIコンテナ 設定ファイルをほとんど書く必要がない アプリケーションを修正したときでも再起動なしで即座にその変更を認識できる Hot Deploy(ホット・デプロイ):Seasar2.4から利用可 スクリプト言語並みのさくさく感 http://s2container.seasar.org/2.4/ja/  より引用
Seasar概要 設定ファイルを書かなくてもすむように、Convention over Configurationの考え方が取り入れられている。  Convention over Configurationとは、「適切な規約を守れば特に面倒な設定をしなくても、 フレームワークが自動的に適切な設定をしてくれるという考え」で、 Ruby on Railsによって 提唱されました。 Seasar2のConvention over Configurationは、Ruby on Railsから ヒントを得ました。 http://s2container.seasar.org/2.4/ja/  より引用
Seasar概要 DI×AOP を実装するコンポーネント コア(必須コンポーネント)である S2Container が相当 DI ( D ependency  I njection) AOP( A spect  O riented  P rogramming)  トランザクションの自動制御、トランザクションと連動したコネクションプーリングを実装している POJO から簡単に利用可能 POJO ( P lain  O ld Java  O bject) Tomcat のような、 Servlet コンテナ上で動作させることができる
S2Daoでよく使うアノテーション
アノテーションとは? JDK5から取り入れられたもの プログラム中に補助的な情報を持たせることができる メタデータ Seasar2でもこれからはバンバン使われる予定 例:@Override アノテーション(標準) オーバーライドを明示する。間違ってオーバーロードだった場合にコンパイルエラーにしてくれる メソッドやクラスに持たせることができるもの
アノテーションとは? アノテーションサンプル
アノテーションとは? アノテーションを取得する
Beanアノテーション(必須) Bean とテーブルの関連付け クラス名からパッケージ名を除いた名前がテーブル名と一致する場合は、 Bean アノテーションを定義する必要はありません versionNo による排他制御用のプロパティ名をデフォルトの versionNo から変えるときに使うのが versionNoProperty 属性。 変更前に取得したテーブル上の versionNo 値が、変更時に違う場合は UpdateFailureRuntimeException が発生する仕組み
Idアノテーション ID アノテーションは主キーを指定します。 IdType でレコード追加時の ID 付与方法を設定。 IdType.IDENTITY : IDENTITY による自動採番機能を使う場合( MySQL/SQLServer など) IdType.SEQUENCE :順序による更新( Oracle/H2 など)
Columnアノテーション プロパティ名と実際のフィールド名が違う場合に利用
S2Daoアノテーション Daoインタフェースに利用 エンティティとの関連付けはここで行う
Argumentsアノテーション メソッドの引数を自動生成(または自分で作成)した SQL 文で参照できるように利用する メソッドの引数名を指定 メソッドの引数名はリフレクションで取得できないため
Queryアノテーション WHERE 句以降の SQL を指定できる バインド変数形式 Arguments アノテーションは不要 後述の SQL コメントを利用した SQL も書ける この場合は Arguments アノテーションと併用
SqlFile アノテーション SQLの生成をS2Daoの自動生成ではなく、自分で外部ファイルに記述する場合に指定する 外部SQLファイルとは?これからお話します。
S2Daoの外部SQL
外部SQLファイル S2Dao の目玉となる機能 O/R マッピングツールの「自動生成 SQL ダメじゃん」に応えてくれる機能 関数を使うもよし Group By  使うもよし 外部 SQL ファイルは同じパッケージ内に配置 外部 SQL ファイルは、 [Dao インタフェース名 ]_[ メソッド名 ] _[DBMS サフィックス ] .sql の命名規則で DBMS サフィックスを付けると、 DBMS ごとに別の SQL を発行してくれる。
外部SQLファイル DBMS と DBMS サフィックスの関係  Oracle : oracle  DB2 : db2 MSSQLServer : mssql  MySQL : mysql  PostgreSQL : postgre  Firebird : firebird  MaxDB : maxdb  HSQL : hsql  Derby : derby  H2 : h2
2Way-SQL 2 WAY-SQL 設計時も実行時も( 2WAY )そのまま使える SQL /*IF*/ - /*END*/ プロパティの評価によって SQL を変えたい場合 /*BEGIN*/ - /*END*/  間について  ネストされた IF 条件が全てが false になった場合は何も出力しない。 例では  select * from emp  になる   /*  コメント  */ のように、スペースをブロックコメントの内側に入れておけば本当のコメントも書ける
Beanのプロパティ 型の決めかたについては以下を参考に
ページング
ページング データベース情報をコンフィグレーションする、「 j2ee.dicon 」ファイルを修正 どうせ毎回使うのでテンプレートとして持っておきたい org.seasar.dao.pager.DefaultPagerCondition  ページングの条件となる、 Limit / Offset 値を設定するクラス Dao メソッドの引数にするだけで適用される
ページング j2ee.diconファイルの設定 Oracle の場合はこちらのブロックを有効に .. 接続設定もこのファイルに含まれる(資料中は省略)
ページング Dao 側のコード DefaultPagerCondition の引数に受けるだけ DefaultPagerCondition を継承したサブクラスでも OK 。 つまり、ページング以外のプロパティを書くことで、外だし SQL で参照できる。
ページング Dao呼び出し側のコード
トランザクション
トランザクション トランザクション機構を提供 S2Txと呼ばれているもの http://s2container.seasar.org/ja/tx.html ちなみにコネクションプーリング機構も提供 S2DBCPと呼ばれている サービス xxLogic xxAction xxService xxApp Dao xxDao Dao zzDao この境界にトランザクションを入れたい
トランザクション トランザクション境界にしたいクラスを dicon ファイルに登録 Aspect タグに、 j2ee.requiredTx を組み込む PointCut 属性を指定する 省略可能なパターン インタフェースを実装しているクラスの場合は省略することで全てのメソッドに組み込まれる
リレーションシップへの対応
リレーションシップ S2Dao はリレーションのマッピングに難あり ManyToOne( 多対 1) のサポートのみ 双方向関連、遅延ローディングの機構はない 参考)リレーションシップの種類 ManyToOne (多対1) OneToMany ( 1 対多) OneToOne ( 1 対 1 ) ManyToMany (多対多) 双方向関連、遅延ローディング (Lazy Loading: レイジー・ローディング)、 Fetch Join 例: S2Dao の ManyToOne
リレーションシップ対策 とはいえ、『 OneToMany : 1 対多』のパターンは良く使われるので何とかせねば。 対策 Dao の呼び出し元で関連を組み立てる コードを追いやすい (本質的ではない)コードが増える インターセプタ( S2AOP )を使う方法 コードはややスッキリ 呼び出し元から隠せる
インターセプタ(S2AOP)
インターセプタ(S2AOP) 意味説明 [arg]DeptOneToManyInterceptor のコンストラクタに EmpDao を渡す [aspect] メソッドインターセプタは、 DeptDao に適用する [pointcut] 適用するメソッドは、 get または find で始まるメソッドのみ Dicon ファイルの記法については公式サイト参照(今回は割愛)
Beanにマッピングするのが面倒ならこうする Map[] 、 List<Map> で戻り値を受けることも可能。 結合や Group By 、関数を使うような SQL が元になる場合、 Bean を用意してマッピングするのが面倒 参照系(画面・帳票)はエンドユーザへの目立つアウトプットでもあり、仕様が変更されやすい。急ぎの修正になることもしばしば。 (外出し) SQL と、画面の修正だけで完結させることが可能
ところで、なぜインタフェースだけでおk?
S2Daoの処理構造 S2AOPが、ユーザ作成のDaoをインターセプト 自動的にサブクラスを生成して実行する EmpDao insert() update() delete() insert() update() delete() EmpDao$$EnhancedByS2AOP$$981ae0e34
S2Daoの処理構造 org.seasar.dao.interceptors.S2DaoInterceptor インタフェースを捕捉。実行する SQL を生成して戻り値を返す
ユニットテスト
S2DaoTestCase S2DaoTestCaseという仕組みを利用する http://s2container.seasar.org/ja/testtech.html#S2DaoTestCase S2Unitの拡張として、データベースとの連携を実装したもの
S2DaoTestCase テストメソッドをトランザクション(自動ロールバック)化 テストデータの作成機能 EXCEL ファイルをテーブルに書き出せる テーブルの内容を EXCEL に書き出す機能もある それぞれ、テスト以外の何かで使える機能 EXCEL ファイルを変数に取り込むことができる。 org.seasar.extentison.dataset.DataSet org.seasar.extentison.dataset.DataTable S2Dao で取得した結果(結果セット)と EXCEL の内容を照合 (Asset) する機能
S2DaoTestCase テストメソッドをトランザクション化 Tx をメソッドの末尾に付けるだけで自動ロールバック
S2DaoTestCase EXCEL データの取り込み テーブルへのレコード追加  : readXlsWriteDb テーブルの総入れ替え  : readXlsAllReplaceDb EXCEL データの取り込み テーブルへのレコード追加  : readXlsWriteDb テーブルの総入れ替え  : readXlsAllReplaceDb EXCEL2007 はダメです。 2003 は OK 。他不明 . ( jakarta-POI 次第)
その他
実行時のコンソールに注目! 実際に発行した SQL を見ることができる SQL ツールでそのままデバッグが可能 ログファイルとして残すのも良し 閲覧には Log4j の設定 (log4j.properties) が必要
周辺ツールも充実 S2Dao-Plugin 外部SQLファイルの存在を教えてくれる 外部SQLファイルの作成支援
周辺ツールも充実 S2Dao-Codegen EXCEL 形式の定義書からソースコードを自動生成してくれる Dao  ⇒  xx.dao パッケージ エンティティ ⇒  xx.dto パッケージ 検索条件クラス ⇒  xx.finddto パッケージ
S2Daoって本当にいいの?-Hibernateについて解説 マッピングの XML を書く エンティティ( Bean) の作成 アノテーションなどの属性は不要 Dao クラスを書く API は何やらいろいろある save(), load(), createCriteria(), list()… S2Dao より学習コストが高いですぅ…  orz
Seasar2繁華街マップ(w S2Container(Extention) S2Container(Framework) S2AOP S2Unit S2Tx S2DBCP S2JDBC アプリケーション Tuigwaa S2Dxo 開発ツール Kijimuna S2JSF Plugin Dolteng O/R マッピング S2Dao Kuina-Dao DBFlute S2Dao Plugin S2DaoCodegen プレゼンテーション S2Flex S2Struts S2JSF Teeda Mayaa Cubby 分散技術 S2RMI S2Axis S2JCA S2JMS Tugboat.GTD 別のツールと連携
補足情報
H2 Database Engine-他DBへの接続 H2 のコンソールは JDBC ドライバがあるほとんどのデータベースに接続できます 下記は PostgreSQL に接続する例 set H2DRIVERS=pg74.216.jdbc3.jar @java -cp &quot;h2.jar;%H2DRIVERS%;%CLASSPATH%&quot; org.h2.tools.Server @if errorlevel 1 pause h2-otherdb.bat を新規作成。 JDBC ドライバを CLASS_PATH に含める JDBC ドライバの追加
Eclipseの便利な使い方 ワーキングセットの活用 『エディターにリンク』の設定 エディタのフォントはお好きなように 私は“ Consolas” を使っています Limy プラグインで setter/getter を半自動化 http://www.limy.org/program/eclipse_plugin/ Vi / Vim  な方は viPlugin もおすすめです( 25 ユーロ) http:// satokar.com/viplugin/index.php
Eclipseの便利な使い方 ショートカット活用 パーツ最大化 : Ctrl + M ビューの切り替え : Ctrl + F7 ファイルの切り替え : Ctrl + F6 インデント自動整形 : Shift + Ctrl + F Import 文の自動補完 : Shift + Ctrl + O コメントの自動生成 : Shift + Alt + J 名前変更(リファクタリング) : Shift + Alt + R 行を移動 : Alt + ↓ or Alt + ↑ インタフェースの実装クラスを見る : Ctrl + T 実行コンテキストメニュー : Shift + Alt + X
ご清聴ありがとうございました m(_ _)m http://d.hatena.ne.jp/morningmist7/

Recommended

PPT
SAStruts Seminar In Tripodworks
PPT
次世代DaoフレームワークDoma
PDF
Doma SQLテンプレートのしくみ
PDF
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
PDF
O/Rマッパーによるトラブルを未然に防ぐ
 
PPT
JPA説明会
PDF
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
PDF
Vsug ef
PDF
RFC6243(With-defaults Capability for NETCONF)の勉強資料
PDF
Tokyo r sqldf
PDF
Symfony2でより良いソフトウェアを作るために
PPTX
RLSを用いたマルチテナント実装 for Django
PDF
JobSchedulerでCD(継続的デリバリ)
PPTX
Java EE8 Report
PDF
Zend四十八手シリーズ Zend_Cache Zend_Paginator
PDF
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
PDF
Java Batch 仕様 (Public Review時点)
PDF
Scala EE 7 Essentials
 
PDF
Java SE 9の紹介: モジュール・システムを中心に
PDF
Oracle Database In Lock
KEY
XPages 開発 Tips 百連発
PPTX
Java EE パフォーマンスTips #glassfish_jp
PDF
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
PDF
perfを使ったPostgreSQLの解析(後編)
PDF
リーンなコードを書こう:実践的なオブジェクト指向設計
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
PDF
Seasarプロジェクト徹底攻略
ODP
Spring2概論@第1回JSUG勉強会
PDF
金魚本読書ノート JPA編
PDF
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発

More Related Content

PPT
SAStruts Seminar In Tripodworks
PPT
次世代DaoフレームワークDoma
PDF
Doma SQLテンプレートのしくみ
PDF
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
PDF
O/Rマッパーによるトラブルを未然に防ぐ
 
PPT
JPA説明会
PDF
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
PDF
Vsug ef
SAStruts Seminar In Tripodworks
次世代DaoフレームワークDoma
Doma SQLテンプレートのしくみ
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
O/Rマッパーによるトラブルを未然に防ぐ
 
JPA説明会
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
Vsug ef

What's hot

PDF
RFC6243(With-defaults Capability for NETCONF)の勉強資料
PDF
Tokyo r sqldf
PDF
Symfony2でより良いソフトウェアを作るために
PPTX
RLSを用いたマルチテナント実装 for Django
PDF
JobSchedulerでCD(継続的デリバリ)
PPTX
Java EE8 Report
PDF
Zend四十八手シリーズ Zend_Cache Zend_Paginator
PDF
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
PDF
Java Batch 仕様 (Public Review時点)
PDF
Scala EE 7 Essentials
 
PDF
Java SE 9の紹介: モジュール・システムを中心に
PDF
Oracle Database In Lock
KEY
XPages 開発 Tips 百連発
PPTX
Java EE パフォーマンスTips #glassfish_jp
PDF
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
PDF
perfを使ったPostgreSQLの解析(後編)
PDF
リーンなコードを書こう:実践的なオブジェクト指向設計
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
RFC6243(With-defaults Capability for NETCONF)の勉強資料
Tokyo r sqldf
Symfony2でより良いソフトウェアを作るために
RLSを用いたマルチテナント実装 for Django
JobSchedulerでCD(継続的デリバリ)
Java EE8 Report
Zend四十八手シリーズ Zend_Cache Zend_Paginator
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
Java Batch 仕様 (Public Review時点)
Scala EE 7 Essentials
 
Java SE 9の紹介: モジュール・システムを中心に
Oracle Database In Lock
XPages 開発 Tips 百連発
Java EE パフォーマンスTips #glassfish_jp
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
perfを使ったPostgreSQLの解析(後編)
リーンなコードを書こう:実践的なオブジェクト指向設計
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか

Similar to S2dao Seminar in tripodworks

PDF
Seasarプロジェクト徹底攻略
ODP
Spring2概論@第1回JSUG勉強会
PDF
金魚本読書ノート JPA編
PDF
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
PPT
SQLチューニング勉強会資料
KEY
Osc2012.dbに行ってきました
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
Groovyで楽にSQLを実行してみよう
PPTX
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
 
PDF
オープンソース・データベースの最新事情
PPT
Gaej Jdo
PPTX
NoSQL Bigtable and Azure Table
PDF
PerlとSQLのいろいろ
PDF
Sql基礎の基礎
PDF
Getting started MySQL as Document Data Store
PPT
Spring3.1概要 データアクセスとトランザクション処理
PDF
よろしい、ならばMicro-ORMだ
PDF
レガシーコード改善はじめました 横浜道場
PPTX
Beginning Java EE 6 勉強会(1) #bje_study
PPTX
1,000,000 foot view of Hadoop-like parallel data processing systems
Seasarプロジェクト徹底攻略
Spring2概論@第1回JSUG勉強会
金魚本読書ノート JPA編
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
SQLチューニング勉強会資料
Osc2012.dbに行ってきました
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Groovyで楽にSQLを実行してみよう
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
 
オープンソース・データベースの最新事情
Gaej Jdo
NoSQL Bigtable and Azure Table
PerlとSQLのいろいろ
Sql基礎の基礎
Getting started MySQL as Document Data Store
Spring3.1概要 データアクセスとトランザクション処理
よろしい、ならばMicro-ORMだ
レガシーコード改善はじめました 横浜道場
Beginning Java EE 6 勉強会(1) #bje_study
1,000,000 foot view of Hadoop-like parallel data processing systems

S2dao Seminar in tripodworks


[8]ページ先頭

©2009-2025 Movatter.jp