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 2026 ExpyDoc