dao.Processor 是多資料庫、多實體環境下 Java 物件資料化與持久化的核心類。本文系統整理其六大使用模式,涵蓋實體綁定、DAO 介面綁定、Query 綁定、直接 SQL 執行、擴展批次操作與連線獲取策略。
三種等效獲取方式:
Processor pro = ProcessorFactory.getProcessorInstance(entity);
Processor pro = Processor.getInstance(entity);
Processor pro = Processor.getInstance(); pro.setEntity(entity); // 或 setEntity(String)
生命週期管理:
pro.open():從 Entity 設定中透過 DataSource 或 ConnectionManager 獲取資料庫連線。pro.close():關閉並清空所有資料資源。Processor 可綁定多個 DAO 物件(服務 SPI 模式),但每個 DAO 僅能綁定一個 Processor 實例。
// 查詢單筆
DAO dao = pro.findByID(id);
DAO dao = pro.findByName(name); // 相當於資料庫一行記錄
DAO dao = pro.findByValue(key, value); // 條件查詢
// 持久化操作(可由容器管理事務)
dao.insert(); dao.update(); dao.delete();
// 對應 pro.insert(dao)、pro.update(dao)、pro.delete(dao)
// 判斷存在性
boolean exists = dao.isExist();
// 直接 SQL 獲取 DAO
DAO dao = pro.getDao(sql);
dao.Query 為 XML 定義的 SQL 查詢容器,典型定義:
<query id="insertThread">
INSERT INTO bbsthread (author, sourceid, views, ...)
VALUES (${author}, ${sourceid}, ${views}, ...)
</query>
使用流程:
Query qry = ...;
qry.addVariant("author", "張三");
qry.addVariant("sourceid", 100);
String sql = qry.getSqlStatement(); // 獲取完整 SQL
pro.setQuery(qry);
String msg = pro.execute(); // 執行更新類,成功回傳空字串
ArrayList list = pro.executeQuery(); // 查詢類,回傳 Entity 物件列表
ResultSet rs = pro.getResultSet(qry); // 獲取原始 ResultSet
// 查詢
ResultSet rs = pro.getResultSet(sql);
ArrayList list = pro.getResultList(sql); // 使用 Entity 設定的 Class
ArrayList list = pro.getResultList(sql, "com.dao.UserDAO"); // 指定 DAO 介面類名
ArrayList list = pro.getResultList(sql, UserDAO.class); // 指定 Class 物件
// 條件排序查詢(需 Entity 已設定)
ArrayList list = pro.getResultList(new String[]{"name='John'"}, "id DESC");
// 更新執行
String msg = pro.doUpdate(sql);
ArrayList stringList = pro.getStringList(qry); // 回傳 String 列表
pro.batchDelete(int[] ids);
pro.batchResume(int[] ids);
pro.batchClear(int[] ids); // 基於已設定 Entity,批次處理指定 ID 集合
getConn() 獲取連線名。setConnection(connName) 指定。最終均由 ConnectionManager 解析為實際 JDBC 連線。