🟦 はじめに
Webアプリケーションにおいて、「入力されたデータを処理してDBに保存し、結果を画面に返す」 という一連の処理は、どの案件でも不可欠な流れです。
この中で中心的な役割を担うのが、
-
DTO(Data Transfer Object)
-
DAO(Data Access Object)
-
JavaBeans(Javaでのデータ構造の基礎的形式)
です。
本章ではこれら3つの役割や関係性、MVCフレームワーク(特にStruts2)での位置付けを明確に整理し、次章以降の実装編や構築編に向けて「基礎知識の地盤」を固めます。
🟨 1. JavaBeansとは? ~ DTOのベースとなる規約 ~
JavaBeansは、Javaにおける「データ構造クラス」の標準的な書き方です。
🔹 JavaBeansの基本ルール
-
publicクラスであること
-
引数なしのコンストラクタがあること
-
getter/setterが正しく定義されていること
public class User {
private int userId;
private String username;
public int getUserId() { return userId; }
public void setUserId(int userId) { this.userId = userId; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
}
🔹 なぜ必要なのか?
-
JSPやStruts2では、自動的にプロパティがバインディングされる(例:フォーム入力 → Bean)
-
EL式でのプロパティ参照(${user.username})などで動作する前提がJavaBeans準拠
JavaBeansはDTOやModelを構成する「最小単位」であり、全てのデータ設計の土台になります。
🟨 2. DTO(Data Transfer Object)とは?
DTOは、画面とのやり取り用に使うデータの器(オブジェクト) です。
🔹 役割
-
画面入力データを受け取る
-
DBから取得した結果を画面に返す
-
DAOやビジネスロジックと連携する中継役
🔹 特徴
-
複数の値を一括で持ち回せる
-
仕様変更があっても影響をコントロールしやすい
-
DBエンティティと同一とは限らない(Viewに最適化された構造も可)
🔹 Struts2での使用例
フォームに入力されたデータをDTOにマッピングし、そのDTOをActionクラスで受け取り、DAOに渡して処理する構成が一般的です。
🔹 Struts2での使用例
フォームに入力されたデータをDTOにマッピングし、そのDTOをActionクラスで受け取り、DAOに渡して処理する構成が一般的です。
<s:form action="login">
<s:textfield name="user.username" label="ユーザー名"/>
<s:password name="user.password" label="パスワード"/>
</s:form>
public class LoginAction extends ActionSupport {
private User user;
public String execute() {
if ("admin".equals(user.getUsername())) {
return SUCCESS;
}
return ERROR;
}
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
}
この例では、DTO(Userクラス)が直接フォームと連携しているのがわかります。
🟨 3. DAO(Data Access Object)とは?
DAOは、データベースとやり取りする責任を担うクラスです。
🔹 役割
-
SQLの実行と結果の取得
-
DTOへのデータ詰め込みと返却
-
DBアクセスの共通処理の一元化
🔹 DAOの基本構成(例)
public interface UserDao {
User findById(int id);
List<User> findAll();
void insert(User user);
void update(User user);
void delete(int id);
}
public class UserDaoImpl implements UserDao {
public User findById(int id) {
Connection conn = ...;
PreparedStatement ps = ...;
ResultSet rs = ...;
// 結果をUserに詰めて返す
}
}
DAOはSQL文を内部に持ち、データ取得後にDTOに詰めてActionクラスへ返す“裏方”です。
🟨 4. MVC構成の中での役割分担
Struts2のようなMVCフレームワークでは、以下のように役割が明確に分かれます:
[View (JSP)]
↑ ↓ ← EL式やタグでDTO参照
[Action (Struts2)]
↑ ↓ ← execute()内でDTOとDAOを操作
[DTO] ⇄ [DAO] ⇄ [DB]
-
DTO:ViewとAction間のデータ輸送係
-
DAO:DBからDTOへのデータ取得・更新を担う
-
Action:DTOとDAOを橋渡しし、処理の流れを制御
🟦 5. 今後の連載とのつながり
本記事で紹介したJavaBeans / DTO / DAOの設計方針は、Vol.10の各章で以下のように深掘りしていきます:
回 | 内容 |
---|---|
Vol.10.1 | DTO設計のベストプラクティス(命名規則・フィールド設計) |
Vol.10.2 | DAOのインタフェース設計と実装パターン |
Vol.10.3 | DB接続クラスの共通化とドライバ設計 |
Vol.10.4 | Actionとの連携実装(Struts2との融合) |
Vol.10.5 | DAO・DTOのテスト設計(JUnitやH2活用) |
さらに、Vol.11以降(掲示板構築編) では、ここで作成したDTO/DAOをベースに、実際の機能(掲示板登録・編集・投稿処理)に落とし込んでいきます。
✅ まとめ
-
JavaBeansはDTOやModelの前提となるJavaの基本規約
-
DTOは画面 ↔ 処理層間のデータ中継役
-
DAOはDBアクセス専用の裏方担当で、DTOを操作する
-
Struts2ではActionがDTOとDAOを結びつけ、MVC構造を実現する
-
この構成は、今後の実装・構築編でも再登場する重要な「アーキテクチャの基礎」
📘 次回予告:Vol.10.1
次回は「DTO設計のベストプラクティス」をテーマに、命名規則・共通DTO化・フォーム連携の実例などを解説していきます!
回 | 内容 |
---|---|
Vol.10.1 | DTO設計のベストプラクティス(命名規則・フィールド設計) |
Vol.10.2 | DAOのインタフェース設計と実装パターン |
Vol.10.3 | DB接続クラスの共通化とドライバ設計 |
Vol.10.4 | Actionとの連携実装(Struts2との融合) |
Vol.10.5 | DAO・DTOのテスト設計(JUnitやH2活用) |