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

iBATIS SQLMap API 程式設計入門與批次操作

     編輯:Java 相關知識

環境建置與基本 CRUD

iBATIS SQLMap 透過 SqlMapClient 介面提供資料庫操作。典型啟動流程:

public void insert(Person p) {
    String resource = "com/Jdnis/ibatis/map/sql-map-config.xml";
    SqlMapClient sqlMap = null;
    try {
        Reader reader = Resources.getResourceAsReader(resource);
        sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

        // 手動事務控制
        sqlMap.startTransaction();
        sqlMap.insert("insertPerson", p);
        sqlMap.commitTransaction();
        System.out.println("資料插入成功");
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        System.out.println("主鍵 " + p.getId() + " 衝突!無法插入資料");
    } finally {
        try {
            sqlMap.endTransaction();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

關鍵點

  • Resources.getResourceAsReader():從 classpath 載入設定檔。
  • SqlMapClientBuilder.buildSqlMapClient():建立單例 SqlMapClient,執行緒安全。
  • 事務 API:startTransaction() / commitTransaction() / endTransaction() 必須成對出現,確保連線正確歸還池中。

批次處理 API

iBATIS 提供簡單的批次介面,適用於大量寫入場景:

// 1. 開啟批次模式
sqlMap.startBatch();

// 2. 連續執行同類型的 insert/update/delete
for (Person p : personList) {
    sqlMap.insert("insertPerson", p); // 實際未送資料庫,累積在批次中
}

// 3. 一次性送出
int[] results = sqlMap.executeBatch(); // 返回各條語句影響筆數陣列

注意事項

  1. 同一 SQL 陳述式:批次模式下需重複呼叫相同的 statement id,驅動程式才能啟用 JDBC addBatch() 優化。
  2. 事務邊界:批次操作應包裹在單一事務中(startTransaction() ~ commitTransaction()),確保原子性。
  3. 記憶體壓力:超大批次(>10000 筆)建議分批 executeBatch(),避免 OOM。

Spring 整合時的差異

在 Spring 管理下,通常不直接操作 SqlMapClient,而是透過 SqlMapClientTemplate 或注入 DAO 介面。批次操作可使用 SqlMapClientTemplate.executeWithListResult() 配合 SqlMapClientCallback 實現,或直接取得 sqlMapClient 調用上述原生 API(需關閉模板的自動事務管理)。

掌握核心 API 後,可根據專案架構靈活選擇「模板簡化」或「原生控制」兩種風格。

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