首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

DAO 設計模式完整實戰:從數據庫建表到分層代碼結構

     編輯:Java 綜合教學

DAO 設計模式完整實戰:從數據庫建表到分層代碼結構

DAO (Data Access Object) 模式將數據訪問邏輯封裝,實現業務邏輯與持久化技術解耦,提高可移植性、可讀性。

五大核心組件

  1. 數據庫連接類:管理連接池(如 C3P0),提供 getConnection()/closeAll()
  2. VO 實體類:屬性與表字段一一對應,實現 Serializable
  3. DAO 接口:定義數據操作契約(如 findMaster())
  4. DAO 實現類:具體 SQL 執行、結果映射、資源關閉
  5. Service 層(工廠):組合 DAO,提供業務方法(如 login()),屏蔽實現細節

完整代碼示例(用戶登錄)

1. 建表 SQL

CREATE TABLE person (id INT PRIMARY KEY, name VARCHAR(50), password VARCHAR(50));

表結構

2. 連接工具類

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) { ... }
}

3. 實體類

public class Person implements Serializable {
    private int id; private String name; private String password;
    // getter/setter
}

4. DAO 接口 & 實現

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;
    }
}

5. Service 接口 & 實現

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;
    }
}

6. 測試類

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) ? "登錄成功" : "用戶名或密碼錯誤");
    }
}

運行結果

分層優勢

  • 更換數據源/ORM 框架只需改 DAO 實現
  • Service 層可加入事務、緩存、權限等橫切關注點
  • 測試時可 Mock DAO 接口
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved