goo blog サービス終了のお知らせ 

これでも私SEなんです

Web開発の奮闘記と、その中で新たに見つけた知識をブログに残して、備忘録にしています。

これはJava!?

2009-06-06 | Javaを学ぶ
DAOクラス
データベースとのアクセスを行うためにDAOというクラスを利用します。
マスタメンテナンス程度の簡単なデータアクセスであれば、
インターフェイスだけで実装できます。
データベースの表に対応したDtoのクラスを指定します。
(Dtoの方ではテーブル名を関連付けています。)
後はメソッドとSQL文を書くだけです。
検索するメソッドは1件取得する場合(Dtoが戻り値)はfind、
複数件取得する(Listが戻り値)場合はselectで始まるメソッドにしてください。
select文の検索条件となる変数を引数にメソッドの定義を作成します。
引数の変数名をあらわすための定数を追加します。
そして、DAOクラス名_メソッド名.sqlと名前のファイルを作成します。
そのSQLファイルにSQL文を書いておきます。
SELECTのメソッドはこれで終了です。
SQL文をJavaの変数にする必要はありませんし、
データベース接続に関する手間も必要ありません。
トランザクションも気にする必要はありません。
ただ、SQL文が正しいかどうかだけの作業です。
検索の結果が取得できました。
あとは画面に表示するだけです。
Actionクラスまで戻って見ましょう。
マスタ管理用のコンテキストに検索結果のリストをセットしているだけです。
HTMLに戻ってみると、forEachタグのところでマスタ用のContextから
データを取得して一覧表示していると思います。
もう一回DAOに戻ってみます。
insertで始まるメソッド、
updateで始まるメソッド、
deleteで始まるメソッドの各引数に
Dtoのインスタンスを渡してあげれば
SQLを記述することなく追加/更新/削除ができます。
MS-Accessの管理ツールはテーブルの内容を自由に変更できるため、
主キーの更新が可能になっています。
一方DAOで更新できるupdate/delete文は変更された主キーを条件にした
SQL文を作成するため、主キーの変更はできない仕様になっています。
なので、更新前の主キーの値として、
original~という項目の別名でユーザIDを取得して
その値をDtoと画面のhiddenタグに格納しています。
--------------------------------------------------------------------------------
Dtoとは?
画面-処理-データベースの各処理間で
データの受け渡しを行うクラスをDto(DataTransferObject)といいます。
難しいことはなく、画面もしくはデータベースの項目名と
データ型にあわせたプロパティを作成し、
そのsetter/getterメソッドを作成すれば、ほぼ終わりです。
項目名は少し特殊でデータベースの項目名にアンダーバーがある場合は、
Dtoではアンダーバーを取り除いて
アンダーバーの次の文字を大文字にするようにしてください。
(例:user_name→userName)
データベースの表と対応するDtoには、1変数が必要になります。
データベースで使う項目は下記の様に設定します。↑
/** テーブルとの対応付け */
public static final String TABLE = "dsm_User";
データベースで使わない項目は下記の様に設定します。↑
/** データベースに格納しない項目 */
public static final String insert_NO_PERSISTENT_PROPS = "delete,dirty,selection,authNum";
ほとんどの場合は同じ記述で大丈夫かと思います。


出来るだけ完結に書くことがゴールですので、
上記の例文を見てもよく分からない人はぁ、
出来るだけ丁寧に解説しますので、
是非ご連絡くださぃ。
人に教えることが出来たら、
自分の勉強にもなるからです。