Java でDAO とBean の連携
Java でDAO とBean の連携
Java でDAO とBean を連携して、 簡単なログイン機能を動かしてみたのでメモ。
環境
想定しているDB
想定しているDBは前回のものと同じ。 sample
という名前のDBで。 中に user
というテーブルを持ち、 カラムは、 id
, pass
, name
と age
を持つ。
DAO とBean の連携
今回のサンプルは、以前に作ったDBと無関係なログイン機能に、 DAOパターンを用いてMySQL DBに保存してあるユーザ情報を用いて、 ログインできるようなログイン機能になる。
内容としてはこれ。
ソースとしてはこれ。
上(前回)のソースでは、
-
ユーザからIDとパスワードが入力され、
LoginServlet
コントローラ がリクエストを受ける。 -
決め打ちしていたIDとパスワードを持っている
Login
クラスでログイン処理を行う。 -
IDとパスワードが正しかったら、
LoginUserBean
クラスでBeanにユーザ情報を入れて、 View(JSP)がそのBeanを参照する。
今回のDAOとBeanを使った場合では、
-
ユーザからIDとパスワードが入力され、
LoginServlet
コントローラがリクエストを受ける。 -
LoginDB
クラスでDBを使ったログイン処理を行う。 その際、LoginDAOクラス(DAOパターン)で、 DBに接続する。 -
DBで参照したIDとパスワードが正しかったら、
LoginUserBean
クラスでBean にユーザ情報を入れて、 View(JSP)がそのBean を参照する。
DAOでDBのユーザ情報をとってくる
DAOでDBに接続するので、 DAO部分でSQL文を実行する。 SQL文を書く際に、 PreparedStatement
ではPHPの prepare
のように書ける。 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 のメリット
DAOとBeanを連携したログイン機能のサンプル
ログイン機能の流れ
-
ユーザからのリクエス、IDとパスワードが付加されている。
-
コントローラ(C): リクエストを受け取り DAOクラスに処理を指示。
-
DAOクラス: DB処理して、 入力されたIDとパスワードとDB情報のIDとパスワードが 正しかったら モデル(M, Bean) に値をセット。
-
View: ViewがBean を参照して ユーザへレスポンスを返す。
コード
実行結果
参考リンク