即可將很多複雜的資料操作語法和業務邏輯分開
探討其思想其實也是一種 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 裡面呢?