O/Rマッピングのメリットとは?

このQ&Aのポイント
  • O/Rマッピングを使うと、データベースとのやり取りが簡単になります。
  • O/Rマッピングを使用することで、SQLを直接書かずにオブジェクト指向のコードを書くことができます。
  • O/Rマッピングは、データベースとアプリケーションの間のパフォーマンスを最適化するための効果的な手段です。
回答を見る
  • ベストアンサー

O/Rマッピングを実践されている方へ

O/Rマッピングを実践されている方へ O/Rマッピングを使うとどんないいことがあるの でしょうか? 私は、普段、JDBCとOracleのストアドプロシージャ を使っていますが。 最近、O/Rマッピングという言葉を聞くようになり、 EJB関連の本を少し読んでみましたが・・ でも、結局EJBの定義の中で ejb-ql というような ものがあって、そこにSQLのようなものを 記述するようになっていることを知りました。 Entitiy Beanに対して set~したり、 get~したり、するだけで あとは EJBコンテナが勝手にやってくれるし、 トランザクション、排他制御等は、 EJBコンテナにお任せして、 やりたいロジックだけ書けばよいとか、 みたいな夢のような話が書いてあります。 本に書いている例では1つのテーブルに対して、 read, writeしている例ぐらいしか。 のっていません。 「そんな単純な例だったら、あんまり恩恵がないなぁ。 設定ファイルを編集する手間が増えるだけ じゃないか。とさえ感じています。」 実際の業務アプリケーションでは、 DBから情報を取得するために 複数のテーブルを結合します。 SQL自体のパフォーマンスを あげるために、かなりコスイことを しなければならないし・・ モデルを実装するクラスの 検索系のロジックが複雑になってしまいます。 更新系であっても排他制御について考える必要があります。 あと、メモリ上にあるJavaBeanの構造が複雑に なってしまいますし、 メンテナンスも大変です それらの煩雑した状態がO/Rマッピングを 使うと、解決されて、 パフォーマンスも実用に耐えうるんでしょうか? だとすれば、なぜ?

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yoneda_16
  • ベストアンサー率47% (166/350)
回答No.1

実際に使っている人ではありませんが、「どんないいことがあるか」についての記事がメモに入っていたのでどうぞ。 ちなみにO/Rマッピングの手法はEJBだけではありません。というか、現段階ではあまりEJBは使わないかも。あと、「実際の業務アプリケーション」で各種フレームワークを能書き通りに使えるわけではないのもご指摘の通りです。能書きを実現しうる手段の一つ、くらいに考えておくといいと思います。 個人的にはこのあたりについてはRelaxerが好きなんですが。EJB3.0にも期待ですね。 http://www.atmarkit.co.jp/fxml/rensai2/xmltool04/01.html

参考URL:
http://www.atmarkit.co.jp/fjava/rensai3/ormap01/ormap01.html
lawson
質問者

補足

どうも、ありがとう。 でも、私が知りたいのは具体的、物理的な話です。 たとえば、 オブジェクト側の永続オブジェクトに 対応するRDB側のテーブルが複数あることがあったとき。 それに対する更新処理はO/Rマッピングではどのように なっているるのでしょうか? RDBには、VIEWがあります。 CREATE VIEW文で定義するアレです。 しかし、VIEWを作成する過程で FROM句に複数の表を指定して結合を おこなったり、 DISTINCTやGROUP BYをすると そのVIEWは更新不可能なVIEWになります。 なぜなら、物理的に不都合だから 更新できないのです。 それでも、 複雑な問い合わせを吸収できるので、 共通の目的をもった個所から、 読み取り専用として、アクセスするのに 使われます。 では、話をもとに戻しますが・・。 「オブジェクト側の永続オブジェクトに 対応するRDB側のテーブルが複数あることがあったとき。 それに対する更新処理はO/Rマッピングではどのように なっているるのでしょうか?」 の質問にもどります。 O/Rマッピングでは、 set~ get~ で、DBに対して読み書きする部分を やってくれるようですが。 それはどうしてですか??? CREATE VIEWのたとえ話では不可能なのになぜですか?? それを 具体的に、物理的に・・。 他にもいろいろ疑問はありますが あまり広範囲になりますと。 話があいまいになるので、 とりあいず、この質問1つに絞ってみます。 よろしく、お願いします。

関連するQ&A

  • O/Rマッパー

    質問です。 O/RマッパーのMyBATISとHibernateを比較しているのですが以下の他に何かありますか? ・xmlファイルの設定 ・方言の吸収 ・SQL文を書くか、書かないか ・マッピングする対象 よろしくお願いします。

    • ベストアンサー
    • Java
  • PHPコードの中から、SQL文を外に出したい!

    いわゆるO/Rマッパーというものが心理的に好きになれません。 簡単なSQLの処理をするメソッドぐらいなら自分で書けますし、 かといって複雑なSQLの処理をするメソッドは、そのメソッドの 操作自体がSQLの複雑さを上回ってしまっており本末転倒です。 かといって、PHPのコードの中に、グチャグチャとSQLがあるのも 見苦しいです。 Smarty がきちんと「見える形」でHTMLを外に出してくれてるのと同様に、 SQL をきちんと「見える形」で外に出せるモジュールはないものでしょうか? (O/RマッパーのSQLは、「見えない形」で、結局PHPの中にいるので、 一層タチが悪い気がします。) それとも、いっそのこと Smarty を使うのがいいのでしょうか? 例) SELECT {foreach from=$column item=item}...{/foreach} FROM table WHERE {foreach from=$where item=item}...{/foreach} ※でも、これもある意味ややこしいし、Smartyのインスタンスを 何個も作るのは重そうなので、避けたいですが・・・。 ある人は、「簡単な処理は O/Rマッパーに、複雑なSQLは直書きで」 と言います。 まるで、「簡単なHTMLはテンプレートに、複雑なHTMLは直書きで」 という理論と同じ気がします。 どっからが複雑で、どこまでが簡単なのかは人によりますよね。 同じ思いの方、「こんなモジュールがある」「僕はこうしてる」等の アドバイスを頂けたら幸いです。

    • ベストアンサー
    • PHP
  • MySQLとJavaでのコードについて。

    JavaBeanを使って、MySQLにデータを追加したいのですが、それがなかなかうまくいかず質問してます。 Statement statement = connection.createStatement(); String sql_str ="INSERT INTO customer VALUES(\"" +name+"','"+email+"','"+password+"\")"; int r=statement.executeUpdate(sql_str); このコードはjavaBeanのなかに入っており、name,email,passwordはjspからjavabeanに送られてきます。多分、VALUESの後のname,emai,passwordを入れるのに”’などの使い方が間違ってると思います。本には載ってなかったので、ウェッブ検索してみよう見真似でやったので、”’の使い方を把握してません。誰か分かる方回答お願いします。 あとこれとは違うmethodにSELECT文を使った時、 String sql_str = "SELECT email, password FROM customer where email='"+email+"'AND password='"+password+"'"; ResultSet rs = stmt.executeQuery(sql_str);とやったときは動きました。最初はこれと同じようにINSERT 文も書いたのですが、動かなかったんですよね。

    • ベストアンサー
    • Java
  • accessとphpとsql

    現在、WEBからphpでSQLを使い、access(2002)にデータ入力とデータ参照するシステムを作成しています。 とりあえず両方できていますが、データ入力は複数人数で同時に更新(異なるレコード。テーブルは同一)することが想定されます。 排他制御はやりかたがわからずに組み込んでおりません。 ですが、入力者には個別のページに飛んでそこからデータを更新するようなWEBになっており、注意して作業してもらえば排他制御しなくてもいいかなと思っています。 ネットでaccessではデータの破損が起きやすいとありましたが、このような使用状況では起こりえるでしょうか? また、accessからmysqlなどに変更するメリットなどはありますでしょうか? よろしくお願いします。

  • JavaBeans,JSP, Servlet(MVC)のみを使った開発って本当に業務で行われているの?

    こんにちは、私がWeb技術を勉強するときによく使う本として、Sun教科書Web Component Developer(試験310-080の対策本なのですが、おそらく現在売っているものより1バージョン古いです)という本があります。 この本には,webのMVCアーキテクチャは以下のように 設計されると記載されています。 サーブレット:Controller(システム処理の制御) JSP :View (画面) JavaBeans :Model (ビジネスロジック) しかし、実際の業務でビジネスロジックがJavaBeansのみで行われているシステムはあるのでしょうか?JavaBeansの定義としては、getXXXやsetXXXアクセス、またコンストラクタが引数をもたずpublicなどと ありますが、これを無視した普通のJavaクラスもビジネスロジックに使われているのではないでしょうか? EJB, Strutsを使わない開発環境でという条件付で、どなたか業務経験のある方、この疑問に答えていただけないでしょうか?

  • Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ

    Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上 Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。 例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id (テーブルBを2回結合している) こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。

  • ステップアップの順序

    数年前まではJavaPG(業務アプリ系)は 簡単なクラス作成と実行→JSPとサーブレット(MVC)→J2EE(EJB2.0、JMSなど) なんてスキルステップアップがあった気がします。それが今では 簡単なクラス作成と実行(eclipse使用)→Struts→ ? となっていて「?」に技術的にどう進むかご相談したいのです。 1.J2EE(EJB2.0、JMSなど) 2.Spring(DI)、HiberNateなどO/Rマッピング 3.Webサービス 4.ASP.NETなど他言語に進む(笑) どう進むか皆様のご意見を頂ければと思います。 上記以外にも「これも必要でしょ」というご意見も嬉しいです。 個人的に「1.」のEJBって まだ需要とかあるのかな?・・。と疑問なのですが。 色々知っておくのも大切ですが、業界の需要や自身の時間も考え ピンポイントで精進していければと思っています。 よろしくお願いします。

  • distinct をexistsに変換する

    distinctをexistsに変換した方がパフォーマンスが良いようで、 例えば以下の例があるとします ---------------------------------- (前)SELECT DISTINCT a.ID1, a.NAME1 FROM TABLE1 a, TABLE2 b WHERE a.ID1 = b.ID2 (後)SELECT a.ID1, a.NAME1 FROM TABLE1 a    WHERE EXISTS ( SELECT 'X' FROM TABLE2 b WHERE a.ID1 = b.ID2) ---------------------------------- もっと複雑なSQLの場合、EXISTSに変換できるのでしょうか?。複雑なSQLとは、 「複数のテーブルからカラムを取得」「テーブル結合が2つ以上」「外部結合」 などのSQLで、以下に例を示します。 (例)SELECT DISTINCT a.ID1,a.NAME1,b.ID2,b.NAME2,c.ID3,c.NAME3    FROM TABLE1 a,TABLE2 b,TABLE3 c    WHERE a.ID1 = b.ID1(+)      AND a.ID1 = c.ID1(+)

  • select insertで複数テーブルから値を取得したい

    環境:oracle9i select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか? たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。 よろしくお願いします。 insertしたいテーブル:A Aテーブルの項目:o,p,q,r,s,t 値を取得するテーブル:B,C Bテーブルの項目:o,p,q,r Cテーブルの項目:o,p,s,t oとpが主キーになっていて、それらが一致するBとCのデータを あわせて、Aにinsertしたいと思っています。 insert into A(o,p,q,r,s,t) select このあと、どのように書けばよいのかがわかりません。

  • PLSQLで条件によりSQLを動的に変えたい

    例えば、あらかじめテーブルなどを読み、その内容により、 SQLの文そのものを非常に変えたいとします。 SQLその1 select * from TABLEA where A = 1 SQLその2 select * from TABLEA where A = 1 and B = 2 and C = 3 and D = 4 上記は例ですが、内容などにより複雑な条件式を追加したい。 ベースのSQLは非常に長い為、 例えば 完全に切り分けるのでは無く、共通の部分は共通ソースとしたい。 また、プリプロセッサみたいに、条件式が追加された場合 あたかも、初めからそのSQLのみがあり、他の制御文などをSQL文自身には追加したくない。 動的SQLでは無い方法でそのような事が可能でしょうか? ----- イメージ ----- select * from TABLEA where A = 1 IF (条件がある時のみ) B = 2 and C = 3 and D = 4 END IF; ------------------- 実際には、SQL文の中にPLSQLの制御文をうまく追加できない。

専門家に質問してみよう