O/R Mapping EJB 3.0 コース 第6回 2006年8月5日 1 ここでの目標 O/R Mapping の考え方がなぜ必要なの か理解する 2 オブジェクト指向開発と データベース 3 オブジェクト指向プログラミング 言語とRDB リレーショナルデータベース (Relational Database = RDB) のデータを、オブジェクト 指向プログラミング言語で表すことはなか なか難しい そもそもデータの表現方法がまったく違う 例えば、RDBの主キーをオブジェクト指向言語 でどう表す? こうした違いを「インピーダンス・ミスマッチ」と 呼ぶ 4 オブジェクト指向 データベース じゃあ、せっかくオブジェクト指向言語を 使っているんだから、データもオブジェクト 指向データベースで管理してみたら? インピーダンス・ミスマッチも起こらないん じゃないの? 5 やっぱりRDB オブジェクト指向データベースは、なかなか普及しない (オブジェクト指向データベースと比べて)RDBは はやい 安定している スケーラビリティに優れている SQLという統一的なデータアクセス言語がある やはり、RDBが使われることが多い じゃあ、どうやってRDBを使う? 6 RDBを使ったシステム (Javaの場合) 7 JDBC (1) Connection con = ......; String select = "select title from books"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(select); while (rs.next()) { String title = rs.getString("title"); } 8 JDBC (2) オブジェクト指向的でない 基本的には、SQLをラッピングしただけ 9 Data Access Object (DAO) パターン (1) BookDAO dao = new BookDAO(); List<Book> l = dao.searchBooks(word); for (Book b: l) { System.out.println(b.title); …… } 10 Data Access Object (DAO) パターン J2EEパターンのひとつ 永続ストレージにあるデータにアクセスす るためのプログラムをひとまとめにしておく 永続ストレージ = データをメモリ上ではなく、 ディスク上に管理しているもののこと リレーショナルデータベース、LDAP、XML、そ のほかテキストファイルなど 11 DAOのメリット リレーショナルデータベースにアクセスするため のコードをひとつのクラスにまとめることができる その結果、JDBCのコードがDAOの中に隠蔽され る DAOを利用するプログラマは、DAOがどのように 実装されているのか知る必要はない。 データベースにアクセスするコードを DAO に局 所化する。 オブジェクト指向的 JDBCはあいかわらず残っているが・・・ 12 O/R Mapping 13 O/R Mapping Object/Relational Mapping インピーダンス・ミスマッチを解消させつつ、POJOを永続 化させる。 POJO = Plain Old Java Object = (普通の)Javaオブジェクト RDBのデータとPOJOを直接対応させる オブジェクトに対する CRUD (Create / Read / Update / Delete) とRDBとの対応 SQLよりも便利な統一的なクエリ言語を用意 JDBCのコードは登場しない。 14 O/R Mapping の ソフトウェア Entity Bean JDO Oracle Toplink Hibernate Cayenne …… 15 Java Persistence API 永続化のための API EJB 3.0 Entity Bean で採用 JSR 220 で議論されている 将来的には、J2SE 環境下でも利用可能 Hibernate でも利用可能 Hibernate Annotations / Hibernate EntityManager 16
© Copyright 2024 ExpyDoc