即可將很多複雜的資料操作語法和業務邏輯分開
探討其思想其實也是一種 ORM 的概念,以下簡介其基本組成
通常會有一個 DAO 的介面以及一個 DAO 的實現類別
以下以一個用戶註冊或登錄的過程做介紹,首先先來看一下 DAO Interface
package fsc.regLog.dao public interface UserDao { //登入時,如果成功即回傳一個封裝後的 User 物件, public User login(String username, String password); //註冊 public void register(User u); //檢查 User 是否存在 public boolean checkUser(User u); }
通常 DAO Interface 的設計需考量的是這個資料庫表單所有可能的操作
如以上針對 User 可能會有註冊、檢查、登錄、修改等
以下是實現 DAO 操作物件的 javabean
package fsc.regLog.model; public class User { private int id; private String username; private String password; public User(){} //other getter & setter }
最後則是實現 DAO 介面的類別
package fsc.regLog.dao; import java.sql.*; public class UserDaoImpl implements UserDao { public User login(String username, String password) { String sql = "SELECT * FROM User_Table WHERE username = ? AND password = ?"; Connection conn = new DataBase().getConnection(); try{ PreparedStatement pstmt = conn.prepareStatement(); pstmt.setInt(1, u.getId()); pstmt.setString(2, u.getUsername()); pstmt.setString(3, u.getPassword()); ResultSet result = pstmt.executeUpdate(); if(result.next()) { User u = new User(); u.setId(result.getInt("id")); u.setUsername(username); u.setPassword(password); return u; } }catch(java.sql.SQLException e){} finally{ conn.close(); } return null; } public void register(User u) { String sql = "INSERT INTO User_Table (id, username, password) VALUES (?,?,?)"; Connection conn = new DataBase().getConnection(); try{ PreparedStatement pstmt = conn.prepareStatement(); pstmt.setInt(1, u.getId()); pstmt.setString(2, u.getUsername()); pstmt.setString(3, u.getPassword()); pstmt.executeUpdate(); }catch(java.sql.SQLException e){} finally{ conn.close(); } } public boolean checkUser(User u) { String sql = "SELECT * FROM User_Table WHERE username = ?"; Connection conn = new DataBase().getConnection(); try{ PreparedStatement pstmt = conn.prepareStatement(); pstmt.setString(1, u.getUsername()); ResultSet result = pstmt.executeUpdate(); if(result.next()) //已存在 { return true; } }catch(java.sql.SQLException e){} finally{ conn.close(); } return false; } }
你好!
回覆刪除我最近才剛學物件導向, 我有一個問題想請教一下.
我們定義的 Interface, 被一個 Class Implements 後, 裡面的每個 Method 都要重新寫一遍.
那為什麼我們不要直接寫在 Class 裡面呢?