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

Java DAO 模式實戰:基於 JDBC 的資料庫操作完整架構

     編輯:Java 綜合教學

Java DAO 模式實戰:基於 JDBC 的資料庫操作完整架構

DAO (Data Access Object) 模式將資料存取邏輯封裝,實現業務邏輯與持久化技術解耦。本文以 MySQL 為例,展示從驅動載入、連線池工具、實體類、DAO 介面到工廠模式的完整分層實作。

JDBC 核心五步驟

  1. 載入驅動:Class.forName("com.mysql.jdbc.Driver")
  2. 獲取連線:DriverManager.getConnection(url, user, pwd)
  3. 建立陳述式:Connection.createStatement() 或 prepareStatement()
  4. 執行 SQL 並處理 ResultSet
  5. 關閉資源(遵循「後開先關」原則)

連線工具類:ThreadLocal 實現線程獨享連線

public class ConnectionUtils {
    private static ThreadLocal<Connection> tl = new ThreadLocal<>();
    private static String url, driver, username, password;

    static {
        // 載入屬性檔、註冊驅動
        Properties props = new Properties();
        props.load(ConnectionUtils.class.getClassLoader()
            .getResourceAsStream("com/day03/db_mysql.properties"));
        url = props.getProperty("url");
        driver = props.getProperty("driver");
        username = props.getProperty("username");
        password = props.getProperty("password");
        Class.forName(driver);
    }

    public static Connection getConnection() throws SQLException {
        Connection con = tl.get();
        if (con == null) {
            con = DriverManager.getConnection(url, username, password);
            tl.set(con);
        }
        return con;
    }

    // 關閉連線、Statement、ResultSet 等輔助方法...
}

屬性配置檔 db_mysql.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root

分層架構實作

  1. 實體類 Emp:POJO,含 id/name/salary 及 Getter/Setter。
  2. DAO 介面 EmpDao:定義 List<Emp> findAllEmp()。
  3. 工廠類 EmpDaoFactory:getEmpDao() 返回具體實現(此處為 MySQL 版)。
  4. 實現類 EmpDaoMySQL:使用 PreparedStatement 防注入,配合工具類管理連線。
  5. 測試類 EmpBiz:透過工廠獲取 DAO,驗證查詢流程。
// EmpDaoMySQL 關鍵片段
public List<Emp> findAllEmp() throws Exception {
    List<Emp> list = new ArrayList<>();
    Connection conn = ConnectionUtils.getConnection();
    PreparedStatement ps = conn.prepareStatement("SELECT * FROM t_emp");
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
        list.add(new Emp(rs.getInt(1), rs.getString(2), rs.getDouble(3)));
    }
    ConnectionUtils.closeAll(ps, rs); // 統一釋放資源
    return list;
}

進階優化方向

  • 引入 Druid/HikariCP 替代簡易 ThreadLocal 連線池。
  • 使用 Spring JdbcTemplate 或 MyBatis 簡化樣板碼。
  • 實現 Generic DAO 以泛型消除重複 CRUD 代碼。
  • 加入 事務管理(ThreadLocal 綁定 Connection + ThreadLocal 事務狀態)。

掌握 DAO 模式精髓,為後續學習 ORM 框架打下堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved