学習メモ:Eclipseで学ぶはじめてのサーブレット&JSP(Part.2)

JDBC

JDBCJDBCで正式な名称は諸説あって、だから、JDBCJDBCで良いのです。

Javaの場合、DBにアクセスする際に使用するのが、JDBCです。
そして、DBに対応したJDBCドライバを利用する必要があります。(.jarを入れろという事)

備忘録として、
JDBCでは、インデックスは「1」から始まります。「0」ではないので、注意。

SQLインジェクション
SQLインジェクションを防止する為に、java.sql.PreparedStatementインタフェースがAPIとして提供されている。
PreparedStatementを使用する場合は、可変になるカラムの値を「?」と記述します。
これは、バインド変数と呼ばれている。

備忘録として、
PreparedStatementでは、
SQLを実行する際に1.2.のステップをすっ飛ばします。
それ故、キャッシュの利用効率が上がり、高速化が図れます。

1.SQL文の解析(構文チェック等)
2.実行方法の特定(SQLを最も効率良く実行する為の実行計画(インデックスのアクセス方法や結合順序等)を決定)
3.SQL文を実行

O/RマッパーJavaはデータのまとまりをオブジェクトとして扱う。
しかし、一方で、DBはデータはテーブルの中のレコードとして保存されている。

その為、JavaでDB操作を行う場合、オブジェクトとレコードのマッピングを行わなければならない。
この面倒な作業は、O/Rマッパーがやってくれる。

O/Rマッパーは、検索結果をListの形式で返したり、
更新メソッドの引数にJavaBeansを渡すとオブジェクトの情報でDBを更新してくれたりする。

Javaのオブジェクト(Object)とRDBの間のマッピングを行なってくれる為、O/Rマッパーと呼ばれる。

マッピング方法は、下記等。
1.設定ファイル
2.アノテーション
3.規約

JavaのO/Rマッパーで有名なのは、下記等。
1.Hibernate
2.S2JDBC
3.S2Dao

              • JavaEEの仕様だと-------

4.JPAJava Persistence API
5.JDO(Java Data Objects)

2.S2JDBCは、4.より10倍生産性が高く開発されたO/Rマッパーなので、
JavaEE仕様に準拠したプロジェクトは、少ない気がします。

DAOパターン

O/Rマッパーの考え方に近いもの。DAO(Data Access Object)
DAOの目的
 →データへのアクセス方法を隠蔽する

DAOの利用方法
 →データへのアクセスを行うクラス(DAOクラス)を作成し、そのクラスを利用してデータベースへアクセスする。
  DAOとなるクラスと、レコードに対応するクラスを作成する。

DAOのメリット
 →データアクセスに関連するコード(JDBCを利用したコード)をDAOクラスに集約するので、
  保守性が高くなる。

3層アーキテクチャ

アプリケーション開発においては、MVCモデルと3層アーキテクチャを組み合わせた開発を行う。
その為、各パーツがどの様な役割なのかを理解する事。

プレゼンテーション層
 ・Action、Controller、Page、Form、Dto
 →View、Controller
  ・JSPServlet、Filter
アプリケーション層
 ・Facade、Service、Logic
 →Model
データ層
 ・Dao
  →Model

途中からプロジェクトに参画する場合は、どの機能をどのクラス、又は、どのパッケージに作成したら良いのか分からないものです。
その為、上記のイメージを紙に書き出してプロジェクトの各パーツを挙げていくのが森を見る上で重要。

プレゼンテーション層のUnitテスト

プレゼンテーション層をServletAPIからの依存をなくして開発出来るフレームワークや、ServletAPIに依存していてもテストを行いやすくするテスティングフレームワーク等がある。
モックフレームワークとしては、「Mockito」、「EasyMock」、「jMock」等。
テスティングフレームワークとしては、「Selenium」が有名。