学習メモ:Eclipseで学ぶはじめてのサーブレット&JSP(Part.2)
JDBCはJDBCで正式な名称は諸説あって、だから、JDBCはJDBCで良いのです。SQLインジェクションJavaの場合、DBにアクセスする際に使用するのが、JDBCです。
そして、DBに対応したJDBCドライバを利用する必要があります。(.jarを入れろという事)備忘録として、
JDBCでは、インデックスは「1」から始まります。「0」ではないので、注意。
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.JPA(Java 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
・JSP、Servlet、Filter
アプリケーション層
・Facade、Service、Logic
→Model
データ層
・Dao
→Model途中からプロジェクトに参画する場合は、どの機能をどのクラス、又は、どのパッケージに作成したら良いのか分からないものです。
その為、上記のイメージを紙に書き出してプロジェクトの各パーツを挙げていくのが森を見る上で重要。
プレゼンテーション層のUnitテスト
プレゼンテーション層をServletAPIからの依存をなくして開発出来るフレームワークや、ServletAPIに依存していてもテストを行いやすくするテスティングフレームワーク等がある。
モックフレームワークとしては、「Mockito」、「EasyMock」、「jMock」等。
テスティングフレームワークとしては、「Selenium」が有名。