モデリング入門

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