Stateless Session Beans

O/R Mapping
EJB 3.0 コース
第6回
1
ここでの目標

O/R Mapping の考え方がなぜ必要なのか
理解する
2
オブジェクト指向開発と
データベース
3
問題点

オブジェクト指向開発では、どのように
データを取り扱うのが良いのか?
4
オブジェクト指向プログラミン
グ言語とRDB

リレーショナルデータベース (Relational
Database = RDB) のデータは、オブジェ
クト指向プログラミング言語で表すこと
はなかなか難しい
そもそもデータの表現方法がまったく違う
 例えば、RDBの主キーをオブジェクト指向言
語でどう表す?
 こうした違いを「インピーダンス・ミスマッ
チ」と呼ぶ

5
オブジェクト指向データベース
じゃあ、せっかくオブジェクト指向言語
を使っているんだから、データもオブ
ジェクト指向データベースで管理してみ
たら?
 インピーダンス・ミスマッチも起こらな
いんじゃないの?
 「…でも…」

6
やっぱりRDB


オブジェクト指向データベースは、なかなか普
及しない
(オブジェクト指向データベースと比べて)RDB
は






はやい
安定している
スケーラビリティに優れている
SQLという統一的なデータアクセス言語がある
やはり、RDBが使われることが多い
じゃあ、どうやってRDBを使う?
7
RDBを使ったシステム
(Javaの場合)
8
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");
}
9
JDBC (2)

オブジェクト指向的でない
テーブルの構造をあらかじめ知っている必要が
ある
 SQLをそのまま利用している


テーブルやSQLの変化に弱い
10
Data Access Object (DAO)
パターン (1)
BookDAO dao = new BookDAO();
List<Book> l = dao.searchBooks(word);
for (Book b: l) {
System.out.println(b.title);
……
}
11
Data Access Object (DAO)
パターン (2)
データベースにアクセスするコードを DAO に
局所化する。
 オブジェクト指向的
 データベースの変更などにも強い
 JDBCはあいかわらず残っているが・・・

12
O/R Mapping
JDBCのコードは登場しない
 基本的には、POJOを永続化させる

13