はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

Java でDAO とBean の連携

Java でDAO とBean の連携

Java でDAO とBean を連携して、 簡単なログイン機能を動かしてみたのでメモ。

環境

想定しているDB

想定しているDBは前回のものと同じ。 sampleという名前のDBで。 中に userというテーブルを持ち、 カラムは、 id, pass, nameage を持つ。

cartman0.hatenablog.com

DAO とBean の連携

今回のサンプルは、以前に作ったDBと無関係なログイン機能に、 DAOパターンを用いてMySQL DBに保存してあるユーザ情報を用いて、 ログインできるようなログイン機能になる。

内容としてはこれ。

cartman0.hatenablog.com

ソースとしてはこれ。

github.com

上(前回)のソースでは、

  1. ユーザからIDとパスワードが入力され、 LoginServletコントローラ がリクエストを受ける。

  2. 決め打ちしていたIDとパスワードを持っている Login クラスでログイン処理を行う。

  3. IDとパスワードが正しかったら、 LoginUserBean クラスでBeanにユーザ情報を入れて、 View(JSP)がそのBeanを参照する。

今回のDAOとBeanを使った場合では、

  1. ユーザからIDとパスワードが入力され、 LoginServletコントローラがリクエストを受ける。

  2. LoginDB クラスでDBを使ったログイン処理を行う。 その際、LoginDAOクラス(DAOパターン)で、 DBに接続する。

  3. DBで参照したIDとパスワードが正しかったら、 LoginUserBean クラスでBean にユーザ情報を入れて、 View(JSP)がそのBean を参照する。

DAOでDBのユーザ情報をとってくる

DAOでDBに接続するので、 DAO部分でSQL文を実行する。 SQL文を書く際に、 PreparedStatementではPHPprepare のように書ける。 Java でもプレースホルダを利用できる。


PreparedStatement ps = con.prepareStatement("select name, age from user where id = ? and pass = ?");

PreparedStatementクラスはSQL文を保持するだけでなく、 検索条件などを動的に変更できる。 .setStirng() でString型で値を ? にset する。


ps.setString(1, id); //1番目の?をid に書き換え
ps.setString(2, pass); //2番目の? をpass に書き換え

PreparedStatement のメリット

  • SQL文とJavaの処理を分離して管理できる

  • SQL分毎に管理できる

DAOとBeanを連携したログイン機能のサンプル

ログイン機能の流れ

  1. ユーザからのリクエス、IDとパスワードが付加されている。

  2. コントローラ(C): リクエストを受け取り DAOクラスに処理を指示。

  3. DAOクラス: DB処理して、 入力されたIDとパスワードとDB情報のIDとパスワードが 正しかったら モデル(M, Bean) に値をセット。

  4. View: ViewがBean を参照して ユーザへレスポンスを返す。

コード

github.com

実行結果

id:web01 でのログイン
ログイン例1
id:web01 でのログイン結果
ログイン例1結果
id:web02 でログイン
ログイン例2
id:web02 でのログイン結果
ログイン例2結果
ログインが失敗した場合の画面
ログイン失敗