DAO (Data Access Object) 模式將數據訪問邏輯封裝,實現業務邏輯與持久化技術解耦,提高可移植性、可讀性。
getConnection()/closeAll()SerializablefindMaster())login()),屏蔽實現細節CREATE TABLE person (id INT PRIMARY KEY, name VARCHAR(50), password VARCHAR(50));

public class C3P0Util {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConn() { return ds.getConnection(); }
public static void closeAll(ResultSet rs, Statement st, Connection conn) { ... }
}
public class Person implements Serializable {
private int id; private String name; private String password;
// getter/setter
}
public interface PersonDao { Person findMaster(Person p); }
public class PersonDaoImpl implements PersonDao {
public Person findMaster(Person p) {
String sql = "SELECT * FROM person WHERE name=? AND password=?";
try (Connection conn = C3P0Util.getConn();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, p.getName());
ps.setString(2, p.getPassword());
ResultSet rs = ps.executeQuery();
if (rs.next()) { /* 映射返回 Person */ }
} catch (Exception e) { e.printStackTrace(); }
return null;
}
}
public interface PersonService { boolean login(Person p); }
public class PersonServiceImpl implements PersonService {
public boolean login(Person p) {
PersonDao dao = new PersonDaoImpl();
return dao.findMaster(p) != null;
}
}
public class LoginTest {
@Test public void loginTest() {
Scanner sc = new Scanner(System.in);
Person p = new Person();
p.setName(sc.next()); p.setPassword(sc.next());
PersonService svc = new PersonServiceImpl();
System.out.println(svc.login(p) ? "登錄成功" : "用戶名或密碼錯誤");
}
}
